您如何将字符串评估为 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 中使用正则表达式实现一个简单的扫描器/标记器