私はいくつかのJavaライブラリラッパーに取り組んでいます。メソッドを持つオブジェクトがいくつかあり、 でそれらを呼び出すことができます(.method object ...)
。関数の数でより便利な API を作成したい(method object ...)
。
簡単なマクロを書きました:
(defmacro ^{:private true} gen-method [method & argv]
`(def ~method (memfn ~method ~@argv)))
これで、たとえば呼び出すことができ(gen-method charAt i)
、その後 を使用できます(charAt "string" 1)
。
しかし、生成するメソッドがたくさんあり、次のようなものを使用したい:
(map #(gen-method (-> %1 name symbol arg)) [:charAt :substring ...])
しかし、これは機能していません。次の例も機能していません。
(map #(let [fname (-> %1 name symbol)] (gen-method fname arg)) [:charAt :substring ...])
マクロで何を変更するか、正しい動作のために何かを追加する必要がありますか?
ありがとう。