作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究一些 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 ...])
最佳答案
你将不得不采取map
宏本身内部的操作为map
操作应该在编译时发生,即表单扩展时而不是在运行时。
如下所示:
(defmacro ^{:private true} gen-methods [methods]
`(do
~@(map (fn [[x & i]] (let [m (-> x name symbol)] `(def ~m (memfn ~m ~@i)) )) methods)))
(gen-methods [ [:charAt i] [:substring i]])
关于macros - 用 memfn 定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11521699/
我正在研究一些 java 库包装器。 我们有一些带有方法的对象,可以用 (.method object ...) 调用它们.我想创建更方便的具有许多功能的 api (method object ...
我上过这样的课: class Test { public: bool bar(int &i, char c) // some arguments are passed by ref, some
我想使用 Java 构造函数作为一流的 Clojure 函数。我的用例是将字符串序列转换为具有单个字符串构造函数的 Java 对象序列: 简单的Java对象: public class Foo {
我是一名优秀的程序员,十分优秀!