以下代码即使在无法达到的条件发出警告的情况下也会触发算术警告。我在 Clojure 中测试了此代码,但没有生成警告。我推测 CLJS 编译器并没有像 Clojure 编译器那样对待 (js/Error)。
以下是触发的确切警告,随后是代码。
警告:cljs.core/+, 所有的参数必须是数字,得到 [数字 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))) ; 这会触发 [数字 cljs-nil] 警告
(print)) ; 5