#(get % "a")
jest rozszerzany przez czytelnika:
user=> '#(get % "a")
(fn* [p1__852#] (get p1__852# "a"))
można zignorować różnicę pomiędzy Fn i fn * w tym przypadku.
(-> ...)
jest makro, które po prostu rethreads swoje argumenty:
user=> (macroexpand-1 '(-> {"a" 1} f))
(f {"a" 1})
pamiętać, że tylko otacza nawiasów wokół f, jeśli nie są już tymi, więc:
user=> (macroexpand-1 '(-> {"a" 1} (f)))
(f {"a" 1})
ale to won” t działa tak, jak można się spodziewać po zastosowaniu do fn
makr:
user=> (macroexpand-1 '(-> {"a" 1} (fn [x] (get x "a"))))
(fn {"a" 1} [x] (get x "a"))
lub na # (...) formy czytnika:
user=> (macroexpand-1 '(-> {"a" 1} #(get % "a")))
(fn* {"a" 1} [p1__867#] (get p1__867# "a"))
Ogólnym rozwiązaniem jest umieścić swoją anonimową funkcję wewnątrz listy, ale jeśli można użyć funkcji o nazwie, myślę, że to brzmi dużo wyraźniej:
user=> (macroexpand-1 '(-> {"a" 1} (#(get % "a"))))
((fn* [p1__870#] (get p1__870# "a")) {"a" 1})