为什么我不能在线程宏中使用匿名函数?

时间:2013-10-18 20:29:10

标签: clojure

如果我在线程宏中使用它之前定义了一个匿名函数:

(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

为什么我不能在线程宏中使用匿名函数?

1 个答案:

答案 0 :(得分:4)

线程宏将前一个表单作为下一个表单中的第二个元素插入。

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

变为

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

你想要:

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

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