以下代码在无法到达警告的条件的情况下触发了算术警告。我在 Clojure 中测试了此代码,但它没有生成警告。我猜 CLJS 编译器不记笔记的方式与 Clojure 编译器处理 (Error.) 的方式不同
下面是触发的确切警告,随后是代码。
WARNING: cljs.core/+, 所有参数必须是数字,得到了 [number clj-nil]。文件:src\spurious_arithmetic\core.cljs,行号:22
(def x [0 1 2 3 4 nil])
(def index (atom -1))
(defn take-value []
(->> (swap! index inc)
(nth x)))
(-> (loop [result (take-value)
prev nil]
(if (= nil result prev) (throw (js/Error. "This condition prevents nil arithmetic.")))
(if (some? result)
(recur (take-value) result)
(+ 1 prev))) ; 触发了 [number cljs-nil] 警告
(print)) ; 5