如何在Clojure中将字符串转换为函数?
我一直在研究,基本上是一个简化的中缀前缀算术计算器:如何在Clojure中将字符串转换为函数?,clojure,Clojure,我一直在研究,基本上是一个简化的中缀前缀算术计算器: (= 7 (__ 2 + 5)) 我按规定解决了问题。但这让我想知道——如果参数是作为字符串提供的——我该如何让它工作呢 (= 7 (__ "2 + 5")) 显然,我会从一个分割开始,然后咀嚼结果: (clojure.string/split "2 + 5" #"\s") user=> ["2" "+" "5"] 但是如何将“+”转换为函数调用呢?这是行不通的: ("+" 2 5) user=> java.lang.C
(= 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>
(“+”2 5)
user=>java.lang.ClassCastException:java.lang.String不能为空
投给clojure.lang.IFn
寻求启发….查看解析函数
((resolve (symbol "+")) 1 2)
您可以使用
加载字符串
或读取字符串
。这类似于common lisp中的READ-FROM-STRING
,它遵循“代码就是数据”的原则,将字符串视为代码-计算并返回值
user=> (class (load-string "+"))
clojure.core$_PLUS_
user=> (read-string "+")
+
user=>
然后你可以简单地使用它