有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Clojure“eval”无法评估!

Possible Duplicate:
How do you evaluate a string as a clojure expression?

从JTextField/Area(来自Java应用程序)获取数据返回类Java的数据。lang.String。将此数据传递给Clojureeval并不是对其进行评估,而是打印,因为它是一个字符串。如何进行评估评估此数据并返回输出

例如:假设文本字段中的数据为(+23)

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

enter image description hereThis打印(+23)而不是5


共 (2) 个答案

  1. # 1 楼答案

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

    例:

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

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

  2. # 2 楼答案

    您需要先将字符串转换为Clojure数据结构,然后才能对其进行求值,因为eval需要一个有效的表单数据结构,如下文档所示:

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

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

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