标题说明了一切。为什么(#(+ % 1) 3)
有效但(#(%) 3)
在Clojure中不起作用?相反,它给出了一个错误:
1. Unhandled java.lang.ClassCastException
java.lang.Long cannot be cast to clojure.lang.IFn
不应该#(%)
与identity
功能相同吗?
答案 0 :(得分:9)
没有。 #(%)
正在尝试调用%。它与(fn [x] (x))
相同。在您的具体情况下,您尝试将3作为一个函数调用。
标识函数为#(do %)
,因为do
会对其后面的表达式求值并返回最后一个。