Search code examples
clojuremacrosclojure-java-interop

Thread-first, thread-last and "dot" form


Why do both of these expressions give the same result?

> (macroexpand-all '(->> "string" (.charAt)))

(. "string" charAt)

> (macroexpand-all '(-> "string" (.charAt)))

(. "string" charAt)

Isn't "->>" macro supposed to insert "string" as the last element in the list?


Solution

  • It expands first to (.charAt "string"), which indeed is last. Then that form further expands to (. "string" charAt).