У меня есть код, который работает после замены строки read-string. Хорошо, что код работает, но я хотел бы знать, почему. В чем разница между двумя функциями clojure?
Разница между строкой чтения и загрузочной строкой в Clojure
Ответ 1
Используйте загрузочную строку для последовательного чтения и оценки набора форм, содержащихся в строка
Используйте read-string для чтения одного объекта из строки s
(оба указаны из Clojure API)
Загрузочная строка будет оценивать вашу строку как выражение Clojure, а строка чтения принимает строку и возвращает ее как найденную структуру данных, и в этом случае может быть выражением.
Protip: (load-string "(+ 1 2)")
и (eval (read-string "(+ 1 2)"))
даст вам тот же результат, который равен 3
Ответ 2
Две заметные отличия:
read-string
читает, но не оценивает, а load-string
читает и оценивает.
(read-string "(inc 1)") => (inc 1)
(load-string "(inc 1)") => 2
read-string
только считывает первую форму в строке, а load-string
загружает все формы в строку.
(read-string "1 2") => 1
(load-string "1 2") => 2