3

スレッド マクロで使用する前に無名関数を定義すると、次のようになります。

(def even #(map even? %))
(-> [1 2 3] even)

正しい結果が得られます:

(false true false)

ただし、次のコードを評価すると:

(-> [1 2 3] #(map even? %))

次のエラーが表示されます。

clojure.lang.Compiler$CompilerException: java.lang.IllegalArgumentException: fn params must be Symbols

スレッド マクロ内で無名関数を使用できないのはなぜですか?

4

1 に答える 1

5

スレッド マクロは、前のフォームを次のフォームの 2 番目の要素として挿入します。

(-> [1 2 3]
    #(map even? %))

になる

(fn* [1 2 3] [arg] (map even? arg))

次のいずれかが必要です。

(->> [1 2 3]
     (map even?))

また

(-> [1 2 3]
    (#(map even? %)))
于 2013-10-18T20:55:49.540 に答える