Разница между строкой чтения и загрузочной строкой в ​​Clojure

У меня есть код, который работает после замены строки read-string. Хорошо, что код работает, но я хотел бы знать, почему. В чем разница между двумя функциями 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