从JTextField / Area(从Java Application)获取数据将返回类 java.lang.String 的数据。将此数据传递给 Clojure 的 eval 并非评估它,而是打印,因为它是一个字符串。如何使 eval 评估此数据并返回输出。
例如。)假设文本字段中的数据为(+ 2 3)
(println (eval (.getText text-field) ))
这会打印(+ 2 3)而不是 5
答案 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进行评估