gpt4 book ai didi

string - read-string 和 load-string 之间是否有 clojure 函数?

转载 作者:行者123 更新时间:2023-12-01 12:51:24 25 4
gpt4 key购买 nike

我想将整个字符串读入列表,但不对其求值。卧槽是我找不到的功能或功能组合。

user=> (wtf?  " S  I I ( S I I)")
(S I I (S I I))

该函数还应作为:

user=> (last (wtf?  " S  I I ( S I I)"))
(S I I)

read-string 仅返回第一个对象,而 load-string 返回所有对象,但会尝试对它们求值。

最佳答案

这是我用的:

(defn safe-read
"Evaluate the string in a safe way"
[s]
(binding [*read-eval* false]
(read-string s)))

来自文档:

"When set to logical false, the EvalReader (#=(...)) is disabled in the read/load in the thread-local binding. Example:

(binding [*read-eval* false] (read-string \"#=(eval (def x 3))\"))

所以它所做的是像往常一样读取字符串,但禁用评估。

因此,您可以使用此功能来读取打印出来的 map 、列表和矢量,而不必担心评估恶意代码。 (好吧,我确定这在多大程度上是安全的,但对于日常使用来说,它可以胜任)。

关于string - read-string 和 load-string 之间是否有 clojure 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12238024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com