Clojure"eval"无法评估!

vik*_*hal 2 java programming-languages clojure

可能重复:
如何将字符串计算为clojure表达式?

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

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

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

在此输入图像描述这打印(+ 2 3)而不是5

mik*_*era 9

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

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

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

(eval (read-string "(+ 2 7)"))
=> 9
Run Code Online (Sandbox Code Playgroud)

  • read-string是REPL的'R'部分 (4认同)