您如何将字符串评估为 clojure 表达式?

Posted

技术标签:

【中文标题】您如何将字符串评估为 clojure 表达式?【英文标题】:How do you evaluate a string as a clojure expression? 【发布时间】:2010-12-25 12:29:53 【问题描述】:

我怎样才能得到类似以下的东西?:

(evaluate-text "(+ 1 2)")  ; resolves to 3

【问题讨论】:

【参考方案1】:
user> (eval (read-string "(+ 1 2)"))
3

您可能永远不需要这样做。宏和 fns 使这种事情在 99% 的时间里都是不必要的。这是相当脆弱的,如果这些字符串来自用户输入等等,则可能是不安全的。

【讨论】:

好吧,我想做一些根本不安全的事情:一个 REPL 聊天机器人。 #clojure 中有一个 clojurebot。 load-string 完全符合他的要求 例如,如果您将 Clojure 数据结构保存到文件中进行存储,然后稍后恢复它们,则需要它。 在 ClojureScript 中,read-string 位于 cljs.reader/read-string 命名空间中,而不是像 Clojure 中的 core【参考方案2】:
(load-string "(+ 1 2)")

【讨论】:

【参考方案3】:

它必须有多相似? Clojure 的 eval 适用于列表,所以:

(eval (list + 1 2)) #=> 3

【讨论】:

我知道 eval,但我认为它不适合我。我真的很想评估一个“字符串”

以上是关于您如何将字符串评估为 clojure 表达式?的主要内容,如果未能解决你的问题,请参考以下文章

在 clojure 中使用正则表达式实现一个简单的扫描器/标记器

如何在 VB6 中将连接字符串评估为索引 XPath 表达式

如何将 clojure 函数作为字符串返回

使用 Clojure reify 提供构造函数

从字符串评估数学表达式并将其插入堆栈

评估作为字符串给出的表达式