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 [%] (%))