2024 Clojure 状态调查! 中分享您的想法。

欢迎!请查看 关于 页面以获取更多关于这是一些什么的信息。

0
ClojureScript
以下代码即使在无法达到的条件发出警告的情况下也会触发算术警告。我在 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

2 答案

0

评论者:mfikes

编译器中的类型推断逻辑预期循环局部变量的类型是静态的。实际上,与该工单相悖的是 CLJS-1561 中正在执行的操作。

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