我正在研究一些 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 ...])
我需要在宏中更改什么或为正确的行为添加一些东西?
谢谢。