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

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

0 投票
ClojureScript

在 Clojure 中,将 nil 作为 range 的第一个参数传递会抛出 NPE,但在 ClojureScript 中则不会,并且会发生奇怪的事情

(range nil 0)
=> ()
(range nil 1)
=> (nil)
(range nil 2)
=> (nil 1)

更糟糕的是,如果起始点和步长都为 nil

(range 0 0 0)
=> ()
(range nil 0 nil)
INTERNAL REPL ERROR: Got an unexpected reply from relay, check Inspect
Timeout while waiting for result.

这实际上会评估为无限 nil 序列!

(take 10 (range nil 0 nil))
=> (nil nil nil nil nil nil nil nil nil nil)

: boom

(已在 clojurians Slack 上发起讨论)

1 答案

0 投票

将非数字参数传递给 range 函数的行为是未定义的。

...