在这个问题之后 Clojure:扩展 let 绑定中的变量和 @amalloy 提供的 https://stackoverflow.com/a/20450289/1074389 解决方案我想知道我是否可以动态地将值传递给 let 表单变量
所以从@ammlloy提出的这段代码开始......
(defmacro with-common [& body]
`(let ~'[x 10, y 20]
~@body))
(with-common (+ x y))
我需要此功能的扩展...
(defmacro with-common [x-val y-val & body]
`(let ~'[x x-val, y y-val]
~@body))
(with-common 2 3 (+ x y)) ;; => 5
提前感谢!胡安
我想知道我是否可以动态地将值传递给 let 表单变量
是的,这种方法似乎可以满足您的需求:
(defmacro with-common [x-val y-val & body]
(let [bindings ['x x-val 'y y-val]]
`(let ~bindings ~@body)))
(with-common 2 3 (+ x y))
;=> 5
(macroexpand '(with-common 2 3 (+ x y)))
;=> (let* [x 2 y 3] (+ x y))