4
user> (map (fn [k] [k]) [1 2 3])
([1] [2] [3])
user> (map #([%1]) [1 2 3])
.... Error..
爲什麼第二個例子是一個錯誤?Clojure的#lambda marco並不總是和(fn)一樣?
user> (map (fn [k] [k]) [1 2 3])
([1] [2] [3])
user> (map #([%1]) [1 2 3])
.... Error..
爲什麼第二個例子是一個錯誤?Clojure的#lambda marco並不總是和(fn)一樣?
的#(<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#))
繼續你的榜樣,你可以使用(圖#(矢量%)[1 2 3])用於相同的功能。 – 2010-12-13 17:27:23
或'(地圖矢量[1 2 3])'' – Sonicsmooth 2013-08-25 06:36:47