user> (map (fn [k] [k]) [1 2 3])
([1] [2] [3])
user> (map #([%1]) [1 2 3])
.... Error..
为什么第二个例子是错误的?
答案 0 :(得分:3)
#(<expr>)
阅读器宏将<expr>
包装在一组额外的括号中,因此#([%1])
扩展为等同于(fn [%1] ([%1]))
而非(fn [%1] [%1])
的内容。所以你是对的。它们并不完全等同。
你可以在REPL中尝试以下内容,它将揭示确切的扩展:
user=> '#([%1])
(fn* [p1__862#] ([p1__862#]))
user=> '#(inc %1)
(fn* [p1__865#] (inc p1__865#))