Clojure macroexpand - PullRequest
       6

Clojure macroexpand

8 голосов
/ 29 ноября 2010

Почему

(macroexpand '(.. arm getHand getFinger))

расширяется до

(. (. arm getHand) getFinger)

, а

(macroexpand '(-> arm getHand getFinger))

расширяется до

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

Другими словами,почему -> не раскрывается полностью во втором примере?

1 Ответ

10 голосов
/ 29 ноября 2010

macroexpand расширяет форму только до тех пор, пока символ в позиции функции не станет макросом.Причина, по которой вы замечаете это в случае ->, заключается в том, что макрос -> является рекурсивным.

В вашем случае вы хотите macroexpand-all форму clojure.walk

...