8
¿Por quéClojure macroexpand
(macroexpand '(.. arm getHand getFinger))
expanda a
(. (. arm getHand) getFinger)
mientras
(macroexpand '(-> arm getHand getFinger))
expande a
(getFinger (clojure.core/-> arm getHand))
En otras palabras, ¿por qué el ->
no se expande por completo en el segundo ejemplo?
que en realidad es por eso que pedí. ¿No debería 'macroexpand' expandirse' -> 'hasta que no fuera una macro? Miré el código fuente para '->' y al final parece que se resuelve en "([x forma] (si (forma seq?) (Con-meta' (~ (primera forma) ~ x ~ @ (próxima forma)) (forma meta)) (lista forma x))) "Tal vez no lo estoy entendiendo correctamente. – Ralph
@Ralph: 'macroexpand' no expande macros en subformularios, entonces' (-> arm getHand getFinger) 'se expande a' (clojure.core/-> (clojure.core/-> arm getHand) getFinger) 'que se expande (porque -> es una macro) a '(getFinger (clojure.core/-> arm getHand))'. La expansión se detiene aquí porque 'getFinger' no es una macro. – Brian
Gracias. Ya lo pillo. – Ralph