I have some co开发者_开发技巧de which works after replacing read-string with load-string. It is good that the code works, but I would like to know why. What is the difference between the two clojure functions?
Use load-string to sequentially read and evaluate the set of forms contained in the string
Use read-string to read one object from the string s
(both quoted from Clojure API)
Load-string will evaluate your string as a Clojure expression, and read-string takes the string and returns it as the found data structure, in which case might be an expression.
Protip: (load-string "(+ 1 2)")
and (eval (read-string "(+ 1 2)"))
will give you the same result, which is 3
Two notable differences:
read-string
reads but does not evaluate, while load-string
reads and evaluates.
(read-string "(inc 1)") => (inc 1)
(load-string "(inc 1)") => 2
read-string
only reads the first form in the string, while load-string
loads all the forms in the string.
(read-string "1 2") => 1
(load-string "1 2") => 2
精彩评论