Clojure:在 let 绑定动态值 var 中扩展一个 var



在这个问题之后 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))

最新更新