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

欢迎!请查看 关于页面 获取更多有关其工作方式的详细信息。

+1
ClojureScript
重新标记
cljs.user=> (def a #js {})
#'cljs.user/a
cljs.user=> (set! a -x false)
WARNING: Use of undeclared Var cljs.user/-x at line 1 <cljs repl>
nil
cljs.user=> a
nil

根本原因在于从 cljs.analyzer 中取出的以下代码没有区分 false/nil 的 alt 和完全缺失的值。

(defmethod parse 'set!
  [_ env [_ target val alt :as form] _ _]
  (let [[target val] (if alt
                       ;; (set! o -prop val)
                       [`(. ~target ~val) alt]
                       [target val])]
    ...))

修复问题的方法之一是显式检查 (count form) 的值。

1 答案

0

选择
...