0

我正在尝试基于static publicJava 类的某些字段动态创建函数。所以在一个文件中我有类似的东西:

(intern *ns* (symbol (get-fieldname-from-class class)) some-func)

问题是我想在尚未定义的情况下调用该特定函数。

例如,Java 类有一个静态 intPARENTHESIZED_EXPRESSION字段。由此我生成一个parenthesized-expression?函数。这很好用,但是当我在REPL使用这个函数的中加载一个 Clojure 文件时,我得到一个

无法解析括号表达式?

错误。所以我必须确保符号的首先被实习。我怎样才能做到这一点?

我意识到这不是一个非常实用的方法,但我有点犹豫要为这个类的所有领域输入近 80 个类似的函数。此外,这门课可能会发生变化。

4

1 回答 1

1

我想知道你是否可以通过使用这样的宏来获得:

user=> (defmacro f [sym] `(defn ~(symbol (str sym "?")) [x#] (= x# ~(symbol (str "java.util.Calendar/" (str sym))))))
#'user/f
user=> (f DAY_OF_MONTH)
#'user/DAY_OF_MONTH?
user=> (DAY_OF_MONTH? java.util.Calendar/DAY_OF_WEEK)
false
user=> (DAY_OF_MONTH? java.util.Calendar/DAY_OF_MONTH)
true
user=> 
于 2013-03-20T19:00:23.027 回答