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

欢迎!请参阅关于页面以获取有关此功能的一些更多信息。

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
by
...