Clojure“eval”无法评估!

时间:2011-11-28 10:34:28

标签: java programming-languages clojure

  

可能重复:
  How do you evaluate a string as a clojure expression?

从JTextField / Area(从Java Application)获取数据将返回类 java.lang.String 的数据。将此数据传递给 Clojure eval 并非评估它,而是打印,因为它是一个字符串。如何使 eval 评估此数据并返回输出。

例如。)假设文本字段中的数据为(+ 2 3)

(println (eval (.getText text-field) ))

enter image description here这会打印(+ 2 3)而不是 5

2 个答案:

答案 0 :(得分:9)

您需要先将字符串转换为Clojure数据结构,然后才能进行评估,因为eval需要根据文档构建有效的表单数据结构:

(doc eval)
-------------------------
clojure.core/eval
([form])
  Evaluates the form data structure (not text!) and returns the result.

最简单的方法是在String上使用read-string,例如

(eval (read-string "(+ 2 7)"))
=> 9

答案 1 :(得分:4)

您必须将字符串"(+ 2 3)"转换为列表数据结构,即(list + 2 3)'(+ 2 3),然后将其传递给eval以评估表单。字符串被计算为字符串,因此在评估字符串"(+ 2 3)"后得到"(+ 2 3)"

例如:

(eval (read (new java.io.PushbackReader (new java.io.StringReader "(+ 1 2)"))))

读取是“读取器”,它读取流并将其解析为clojure代码,然后使用eval进行评估