请在 2024 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面以了解更多关于如何使用本网站的信息。

0 投票
ClojureScript

类似于 CLJS-2113,但针对 {{aget}}

Clojure

用户=> (aget (to-array [nil 1]) -1) ArrayIndexOutOfBoundsException -1 clojure.lang.RT.aget (RT.java:2336) 用户=> (aget (to-array [nil 1]) 0) nil 用户=> (aget (to-array [nil 1]) 0.5) nil 用户=> (aget (to-array [nil 1]) 1) 1 用户=> (aget (to-array [nil 1]) 1.5) 1 用户=> (aget (to-array [nil 1]) 2) ArrayIndexOutOfBoundsException 2 clojure.lang.RT.aget (RT.java:2336)

ClojureScript

cljs.user=> (aget (to-array [nil 1]) -1) nil cljs.user=> (aget (to-array [nil 1]) 0) nil cljs.user=> (aget (to-array [nil 1]) 0.5) nil cljs.user=> (aget (to-array [nil 1]) 1) 1 cljs.user=> (aget (to-array [nil 1]) 1.5) nil cljs.user=> (aget (to-array [nil 1]) 2) nil

请注意,Clojure 将索引向下取整为最近的整数,而 ClojureScript 则不这样做

(aget (to-array [1 2]) 0.5)

在 Clojure 中返回 {{1}},在 ClojureScript 中返回 {{nil}}。

(推测,类似的 结果对 {{aset}} 也适用。)

2 答案

0 投票

由: mfikes 评论

Clojure 的 {{aget}} 确实对非整数索引进行处理可能不是故意的。可能只存在 {{int}} 强制类型转换,以方便与 Clojure 中对 {{long}} 整数值的默认使用进行互操作,而此强制类型转换导致了观察到的行为(传入的 {{double}} 的向下取整),但这可能不符合预期的 API。

以下是一个讲述“暗示”的提交: https://github.com/clojure/clojure/commit/742619e583400400e69cd46ab9e9536c10afb738

0 投票
...