Clojure宏扩展

时间:2010-11-29 13:56:47

标签: macros clojure

为什么

(macroexpand '(.. arm getHand getFinger))

扩展到

(. (. arm getHand) getFinger)

,而

(macroexpand '(-> arm getHand getFinger))

扩展为

(getFinger (clojure.core/-> arm getHand))

换句话说,为什么->在第二个例子中没有完全展开?

1 个答案:

答案 0 :(得分:10)

macroexpand仅扩展表单,直到函数位置中的符号不​​是宏。您在->的情况下注意到这一点的原因是因为->宏是递归的。

在您的情况下,您希望macroexpand-all形成clojure.walk