这里有一个小问题..我有点困惑。
(((fn [_ & y] y) 'blah +) 3 4)
将导致错误:
“java.lang.ClassCastException:clojure.lang.ArraySeq无法强制转换为clojure.lang.IFn”
我非常希望将其评估为:
(+ 3 4)
等于7。
我明白了
((fn [_ & y] y) 'blah +)
评估为
(#<core$_PLUS_ clojure.core$_PLUS_@7cd07b83>)
是一个ArraySeq,而不是一个IFn;所以我理解错误 - 但是我不确定为什么它不只是评估为+而是。
答案 0 :(得分:3)
&
将所有多余的参数放在集合中。这可以被解构为访问其第一个元素:
user> (((fn [_ & [y & _]] y) 'blah +) 3 4)
7
或等同地
user> (((fn [_ & ys] (first ys)) 'blah +) 3 4)
7
答案 1 :(得分:1)
函数参数destroy中的&符号&
收集seq的所有剩余参数,即使那里只有一个参数。
user=> ((fn [_ & y] y) 'blah +)
(#<core$_PLUS_ clojure.core$_PLUS_@205074de>)
user=> ((fn [_ y] y) 'blah +)
#<core$_PLUS_ clojure.core$_PLUS_@205074de>