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

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

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

【问题讨论】:

    标签: clojure eval metaprogramming evaluation


    【解决方案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,但我认为它不适合我。我真的很想评估一个“字符串”
      猜你喜欢
      • 1970-01-01
      • 2011-06-03
      • 2016-04-24
      • 2011-08-03
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多