我想使用binding宏,但希望它像顺序一样顺序let.
我想我可以这样写...
(binding [a 1]
(binding [b (inc a)]
(println b)))
......但是必须有一个更好的方法.有什么想法吗?
(defmacro binding* [bindings & body]
(reduce (fn [acc [x y]]
`(binding [~x ~y] ~acc))
`(do ~@body)
(reverse (partition 2 bindings))))
user> (declare ^:dynamic a ^:dynamic b)
#'user/b
user> (binding* [a 1 b (inc a)] [a b])
[1 2]
user> (macroexpand-1 '(binding* [a 1 b (inc a)] [a b]))
(clojure.core/binding [a 1]
(clojure.core/binding [b (inc a)]
(do [a b])))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |