简单函数的参数数量错误

时间:2013-08-12 20:21:25

标签: clojure

有人可以解释下面Clojure代码中的行为吗? 我不明白。 Clojure会以某种方式替换或“优化”函数参数吗?为什么调用具有单个nil参数的函数会导致ArityException

(defn foo [bar] (reduce #(%1) bar))

(foo nil)
-> ArityException Wrong number of args (0) passed to: test$foo$fn  clojure.lang.AFn.throwArity (AFn.java:437)

1 个答案:

答案 0 :(得分:5)

请参阅(doc reduce)

  

[...]   如果coll包含no   items,f也必须不接受任何参数,并且reduce返回   调用没有参数的f的结果。   [...]

这里的coll是nil,它实际上被视为不包含任何项目的集合(因为它通常在类似的上下文中),而f#(%1)

因此调用#(%1)时没有参数,最终抛出你看到的异常。