我正在尝试基于Java类的一些static
public
字段动态创建函数。所以在一个文件中我有类似的东西:
(intern *ns* (symbol (get-fieldname-from-class class)) some-func)
问题是我想在尚未定义的情况下调用该特定函数。
例如,Java类具有静态int PARENTHESIZED_EXPRESSION
字段。由此我生成parenthesized-expression?
函数。这非常好用,但是当我在使用这个函数的REPL
中加载一个Clojure文件时,我得到了一个
无法解析parenthesized-expression?
错误。所以我必须确保符号首先被实习。我怎样才能做到这一点?
我意识到这不是一个非常实用的方法,但是我有点犹豫要为这个类的所有字段输入近80个类似的函数。此外,这个课程可能会有所变化。
答案 0 :(得分: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=>