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

欢迎!有关此工作的更多信息,请参阅关于页面。

0 票票
ClojureScript

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

Clojure

user=> (aget (to-array [nil 1]) -1) ArrayIndexOutOfBoundsException -1 clojure.lang.RT.aget (RT.java:2336) user=> (aget (to-array [nil 1]) 0) nil user=> (aget (to-array [nil 1]) 0.5) nil user=> (aget (to-array [nil 1]) 1) 1 user=> (aget (to-array [nil 1]) 1.5) 1 user=> (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 票票
参考:[https://clojure.atlassian.net/browse/CLJS-2149](https://clojure.atlassian.net/browse/CLJS-2149)(由mfikes报告)
...