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

标签 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 2 3]
    #(map even? %))

成为

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

你想要:

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

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

关于clojure - 为什么我不能在线程宏中使用匿名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19458512/

相关文章:

Clojure、奎尔 : Printing in draw function

multithreading - 如何在 Clojure 中使用轻量级线程?

function - Clojure 函数 - 返回在最后一条语句之前计算的值

map - 我可以使用 require :as with Java interop? 吗

clojure - Clojure 中的线程注释

macros - Clojure var 定义宏

clojure.tools/命名空间刷新失败,错误代码为 "No namespace: foo"

clojure - 如何调试 ClojureScript

java - 昂贵算法的 Clojure 性能

clojure - 如何重复 Clojure REPL 中的最后一行?