Clojure中read-string和load-string的区别

11

我有一些代码,在将read-string替换为load-string后可以正常运行。很好,代码可以工作,但我想知道原因。这两个clojure函数之间有什么区别?

2个回答

9
使用load-string按顺序读取和评估字符串中包含的一组表单。
使用read-string从字符串s中读取一个对象。
(均引自Clojure API) load-string将评估您的字符串作为Clojure表达式,而read-string将字符串读取并将其返回为找到的数据结构,在这种情况下可能是表达式。
专业提示:(load-string "(+ 1 2)")(eval (read-string "(+ 1 2)")) 将给出相同的结果,即3。

1

两个显著的区别:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接