2024 年 Clojure 调查问卷 中分享您的想法!

欢迎!请访问 关于 页面了解更多关于这个平台的细节。

0
ClojureScript
以下代码即使在不可能达到的条件上也会触发算术警告。我在 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

2 个回答

0

评论者:mfikes

编译器中类型推断逻辑预期循环局部变量是静态的。事实恰恰与此票据 CLJS-1561 中所做的事情相反。

0
参考: https://clojure.atlassian.net/browse/CLJS-1450(由 alex+import 报告)
...