请分享您的想法,参加2024年Clojure状态调查!

欢迎!请查看关于页面以了解更多此网站的工作方式。

0
ClojureScript

ClojureScript 1.10.238版本中,如果你在一个使用{{cljs.spec.test.alpha/instrument}}进行instrumented的函数上调用{{.apply}}并且参数超过21个,将得到一个关于无效参数个数(arity)的错误。ClojureScript 1.9.954版本中没有这个问题。

`
(require '[cljs.spec.alpha :as s] '[cljs.spec.test.alpha :as stest])

(defn my-fun [& args] (prn :args args))
(s/fdef my-fun :args (s/cat :args (s/* any?)))

(.apply my-fun nil (into-array (range 22)))
;; :args (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21)

(stest/instrument)
(.apply my-fun nil (into-array (range 22)))
;; 错误:Invalid arity: 22
;; 在Function.G__10112 [as call] (.../cljs/core.js:6798:7)
;; 在Function.cljs.core.MetaFn.apply (.../cljs/core.js:6829:24)
;; 在repl:1:96
`

常规{{apply}}函数按预期工作。

5 个答案

0

由: dnolen

参见CLJS-364 & CLJS-365

0

由: aralo

其中一些已经被(注释掉)并添加到apply测试套件补丁中:CLJS-2147

0

由: dnolen

太好了,谢谢测试。

0

由: dnolen

现在我在处理 CLJS-2761 这个问题后重新思考这个问题,我们为什么需要支持 .apply?我相信这从来没有被承诺。

0
参考资料:[https://clojure.atlassian.net/browse/CLJS-2710](https://clojure.atlassian.net/browse/CLJS-2710)(由 arcatan 提供)
...