为什么(#(+%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
将计算其后的表达式并返回最后一个表达式。
但是为什么'%'代表第一个例子中的参数值,但在第二个例子中调用了参数? – Ana
因为它是'('在第二个例子之后的第一件事情,'('是你调用的函数之后的第一件事情,在第一个例子中它是'+' –
好的解释。 – Ana