匿名函数错误:类 java.lang.Long 无法转换为类 clojure.lang.IFn

问题描述 投票:0回答:1
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)
,这会产生完全相同的错误。

但是,为什么我在第一种情况下没有收到此错误?有什么区别?

clojure
1个回答
1
投票

#(...)
,当里面只有
%
而没有其他表示多个参数的东西时,相当于
(fn [%] (...))
不是
(fn [%] ...)
,正如您所期望的。

所以

#(%)
(fn [%] (%))
相同 - 它是一个将其参数作为不带参数的函数调用的函数。

© www.soinside.com 2019 - 2024. All rights reserved.