在 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 上提出讨论)