user=> ((fn [x] x) 5)
5
user=> (#(%) 5))
Execution error (ClassCastException) at user/eval1576$fn (REPL:1).
class java.lang.Long cannot be cast to class clojure.lang.IFn (java.lang.Long is in module java.base of loader 'bootstrap'; clojure.lang.IFn is in unnamed module of loader 'bootstrap')
我预计这两个匿名函数是等效的。我在第二种情况下遇到了错误:匿名函数的评估产生
(5)
,这会产生完全相同的错误。
但是,为什么我在第一种情况下没有收到此错误?有什么区别?
#(...)
,当里面只有%
而没有其他表示多个参数的东西时,相当于(fn [%] (...))
。 不是到(fn [%] ...)
,正如您所期望的。
所以
#(%)
与 (fn [%] (%))
相同 - 它是一个将其参数作为不带参数的函数调用的函数。