0

static publicJava クラスのいくつかのフィールドに基づいて関数を動的に作成しようとしています。したがって、1つのファイルには次のようなものがあります。

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

問題は、まだ定義されていない特定の関数を呼び出したいことです。

たとえば、Java クラスには static 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 に答える