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

问题描述:

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

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

不宜#(%)是一样的identity功能?

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

身份函数将为#(do %),因为do将计算其后的表达式并返回最后一个表达式。

+0

但是为什么'%'代表第一个例子中的参数值,但在第二个例子中调用了参数? – Ana

+5

因为它是'('在第二个例子之后的第一件事情,'('是你调用的函数之后的第一件事情,在第一个例子中它是'+' –

+0

好的解释。 – Ana