为什么会这样?
扩展到
当...时
换句话说,为什么在第二个例子中
(macroexpand '(.. arm getHand getFinger))
扩展到
(. (. arm getHand) getFinger)
当...时
(macroexpand '(-> arm getHand getFinger))
扩展为
(getFinger (clojure.core/-> arm getHand))
换句话说,为什么在第二个例子中
->
没有完全展开?
macroexpand
不应该一直展开->
直到它不再是一个宏吗?我看了一下->
的源代码,它最终似乎会解析为 "([x form] (if (seq? form) (with-meta `(~(first form) ~x ~@(next form)) (meta form)) (list form x)))"。也许我没有正确理解它。 - Ralphmacroexpand
不会展开子表单中的宏,因此(-> arm getHand getFinger)
展开为(clojure.core/-> (clojure.core/-> arm getHand) getFinger)
,这是因为->
是一个宏,所以展开为(getFinger (clojure.core/-> arm getHand))
。展开在此处停止,因为getFinger
不是一个宏。 - Brian