以下代码即使在不可能达到的条件上也会触发算术警告。我在 Clojure 中测试了此代码,并没有生成警告。我猜测 CLJS 编译器并没有像 Clojure 编译器那样处理 (js/Error)。
以下是具体触发的警告,然后是代码。
警告:cljs.core/+, 所有参数必须是数字,得到 [number clj-nil],而非数字,在第 22 行 src\spurious_arithmetic\core.cljs
(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