欢迎!请查看 关于 页面了解更多有关该功能的信息。
以下应该抛出异常
cljs.user=> (set! *print-fn-bodies*) nil cljs.user=> (set! *print-fn-bodies* true) true cljs.user=> (set! target -prop 3) true cljs.user=> (set! *print-fn-bodies* true false true) true
实现指导
抛出的信息应从 Clojure 衍生,例如 "格式不正确的赋值,期望 (set! target val) 或 (set! target -prop val)"
可以在分析器代码中添加检查和抛出,该代码解析 'set! https://github.com/clojure/clojurescript/blob/6eedd0a08c49f7b0d4dcb30977b2fb38c90577bd/src/main/clojure/cljs/analyzer.cljc#L2229
'set!
类似的异常示例在 'if 的分析器代码中 https://github.com/clojure/clojurescript/blob/6eedd0a08c49f7b0d4dcb30977b2fb38c90577bd/src/main/clojure/cljs/analyzer.cljc#L1446-L1449
'if
可以在 {{cljs.analyzer-tests}} 中添加测试(通过 {{lein test}} 运行):https://github.com/clojure/clojurescript/blob/master/src/test/clojure/cljs/analyzer_tests.clj
评论者:namenu
set! 支持三种参数形式,所以 Clojure 中的错误信息可能存在语法错误。
set!
直接抛出错误与 {{'if}} 一样好吗?
评论者:thheller
代码表明传递 3 个参数实际上是有效的。
(set! o -prop val) (set! (.-prop o) val)
评论者:mfikes
托马斯,明白了。我会更新描述。
Hyunwoo:是的
评论者:sulami
希望这个能解决问题(我验证过它能在我的机器上构建并在所有项目上运行)。
Hi Robin。谢谢您的贡献。您已经签署CA了吗?
是的,我刚刚签过。
CLJS-2923.patch LGTM。它在CI和Canary测试中表现正常并成功通过。