Clojure宏扩展

Ral*_*lph 8 macros clojure

为什么

(macroexpand '(.. arm getHand getFinger))
Run Code Online (Sandbox Code Playgroud)

扩展到

(. (. arm getHand) getFinger)
Run Code Online (Sandbox Code Playgroud)

(macroexpand '(-> arm getHand getFinger))
Run Code Online (Sandbox Code Playgroud)

扩展到

(getFinger (clojure.core/-> arm getHand))
Run Code Online (Sandbox Code Playgroud)

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

小智 10

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

在你的情况下,你想要macroexpand-all形式clojure.walk