4
user> (map (fn [k] [k]) [1 2 3])
([1] [2] [3])
user> (map #([%1]) [1 2 3])
.... Error..
2番目の例でエラーが発生するのはなぜですか?Clojureの#lambda marcoは(fn)と必ずしも同じではありませんか?
user> (map (fn [k] [k]) [1 2 3])
([1] [2] [3])
user> (map #([%1]) [1 2 3])
.... Error..
2番目の例でエラーが発生するのはなぜですか?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])を使用することができます。 –
または '(マップベクトル[1 2 3])' – Sonicsmooth