【问题标题】:How to convert a string to a function in Clojure?Clojure中如何将字符串转换为函数?
【发布时间】:2012-07-12 18:31:12
【问题描述】:

我一直在研究Clojure question 135 Infix Calculator,基本上是一个简化的前缀算术计算器中缀:

(= 7  (__ 2 + 5))

我按照说明解决了问题。但这让我想知道 - 如果参数是作为字符串提供的 - 我将如何让它工作?

(= 7  (__ "2 + 5"))

显然我会从 拆分 开始,然后仔细研究结果:

(clojure.string/split "2 + 5" #"\s")
user=> ["2" "+" "5"]

但是如何将“+”转换为函数调用?这是行不通的:

("+" 2 5)
user=> java.lang.ClassCastException: java.lang.String cannot be 
cast to clojure.lang.IFn <snip>

寻求启蒙......

【问题讨论】:

    标签: clojure


    【解决方案1】:

    看看resolve函数

    ((resolve (symbol "+")) 1 2)
    

    【讨论】:

      【解决方案2】:

      您可以使用load-stringread-string。这有点像 common lisp 中的READ-FROM-STRING,它遵循“代码即数据”的原则,将字符串视为代码 - 评估并返回值。

      user=> (class (load-string "+"))
      clojure.core$_PLUS_
      user=> (read-string "+")
      +
      user=>
      

      那么你可以简单地使用它。

      【讨论】:

        猜你喜欢
        • 2020-11-22
        • 2011-08-03
        • 2011-04-12
        • 2010-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-22
        相关资源
        最近更新 更多