定义一个使用可变参数的多重方法,然后在具有超过20个项的可序列化对象上使用apply时失败。
错误会根据是否有正好21个参数或更多而有所不同。
这种行为在普通函数定义中不会观察到。
ClojureScript 1.10.439
cljs.user=> (defmulti foo (fn [& args] (first args)))
'cljs.user/foo
cljs.user=> (defmethod foo 0 [& args])
object(link: cljs.core.MultiFn)
cljs.user=> (apply foo (range 20))
nil
cljs.user=> (apply foo (range 21))
错误:20不是ISeqable
cljs$core$seq (.cljs_nashorn_repl/cljs/core.cljs:1223:13)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3739:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$spread (.cljs_nashorn_repl/cljs/core.cljs:3740:9)
cljs$core$IFn$_invoke$arity$variadic (.cljs_nashorn_repl/cljs/core.cljs:3926:6)
G__12749__22 (.cljs_nashorn_repl/cljs/core.cljs:10998:5)
G__12749 (.cljs_nashorn_repl/cljs/core.cljs:10868:1)
apply (.cljs_nashorn_repl/cljs/core.cljs:10868:1)
cljs$core$IFn$_invoke$arity$6 (.cljs_nashorn_repl/cljs/core.cljs:3885:6)
cljs$core$IFn$_invoke$arity$5 (.cljs_nashorn_repl/cljs/core.cljs:3879:6)
cljs$core$IFn$_invoke$arity$4 (.cljs_nashorn_repl/cljs/core.cljs:3873:6)
cljs$core$IFn$_invoke$arity$3 (.cljs_nashorn_repl/cljs/core.cljs:3867:6)
cljs$core$IFn$_invoke$arity$2 (.cljs_nashorn_repl/cljs/core.cljs:3861:6)
cljs$core$IFn$_invoke$arity$2 (.cljs_nashorn_repl/cljs/core.cljs:3896:6)
cljs$core$apply (.cljs_nashorn_repl/cljs/core.cljs:3887:1)
(<NO_SOURCE_FILE> <eval>:1:0)
(<NO_SOURCE_FILE> <eval>:1:0)
(<NO_SOURCE_FILE> <eval>:1:0)
cljs.user=> (apply foo (range 22))
错误:无效的arity:22
G__12749 (.cljs_nashorn_repl/cljs/core.cljs:36125:0)
apply (.cljs_nashorn_repl/cljs/core.cljs:10868:1)
cljs$core$IFn$_invoke$arity$6 (.cljs_nashorn_repl/cljs/core.cljs:3885:6)
cljs$core$IFn$_invoke$arity$5 (.cljs_nashorn_repl/cljs/core.cljs:3879:6)
cljs$core$IFn$_invoke$arity$4 (.cljs_nashorn_repl/cljs/core.cljs:3873:6)
cljs$core$IFn$_invoke$arity$3 (.cljs_nashorn_repl/cljs/core.cljs:3867:6)
cljs$core$IFn$_invoke$arity$2 (.cljs_nashorn_repl/cljs/core.cljs:3861:6)
cljs$core$IFn$_invoke$arity$2 (.cljs_nashorn_repl/cljs/core.cljs:3896:6)
cljs$core$apply (.cljs_nashorn_repl/cljs/core.cljs:3887:1)
(<NO_SOURCE_FILE> <eval>:1:0)
(<NO_SOURCE_FILE> <eval>:1:0)
(<NO_SOURCE_FILE> <eval>:1:0)
cljs.user=> (defn bar [& args])
'cljs.user/bar
cljs.user=> (apply bar (range 100))
nil