为什么(#(+%1)3)工作但(#(%)3)在Clojure中不起作用?

时间:2015-10-07 04:40:12

标签: clojure

标题说明了一切。为什么(#(+ % 1) 3)有效但(#(%) 3)在Clojure中不起作用?相反,它给出了一个错误:

1. Unhandled java.lang.ClassCastException
   java.lang.Long cannot be cast to clojure.lang.IFn

不应该#(%)identity功能相同吗?

1 个答案:

答案 0 :(得分:9)

没有。 #(%)正在尝试调用%。它与(fn [x] (x))相同。在您的具体情况下,您尝试将3作为一个函数调用。

标识函数为#(do %),因为do会对其后面的表达式求值并返回最后一个。