8
WarumClojure macroexpand
(macroexpand '(.. arm getHand getFinger))
zu
(. (. arm getHand) getFinger)
erweitern, während
(macroexpand '(-> arm getHand getFinger))
expandiert nach
(getFinger (clojure.core/-> arm getHand))
Mit anderen Worten, warum wird die ->
im zweiten Beispiel nicht vollständig erweitert?
das eigentlich ist, warum, fragte ich. Sollte 'macroexpand' nicht erweitert haben ->' bis es kein Makro war? Ich schaute auf den Quellcode für '->' und es scheint sich schließlich zu "([x form] (wenn (seq? Form)) (mit-meta' (~ (erste Form) ~ x ~ @ (nächste Form)) (Metaform)) (Listenform x))) "Vielleicht verstehe ich es nicht richtig. – Ralph
@Ralph: 'macroexpand' erweitert Makros in Unterformularen nicht, also' (-> arm getHand getFinger) 'expandiert zu' (clojure.core/-> (clojure.core/-> arm getHand) getFinger) 'was expandiert (weil -> ist ein Makro) zu '(getFinger (clojure.core/-> arm getHand))' '. Die Erweiterung stoppt hier, weil 'getFinger' kein Makro ist. – Brian
Danke. Hab es jetzt verstanden. – Ralph