欢迎!请参阅关于页面,了解更多关于这个功能的信息。
以下是第一个和最后一个应该抛出异常的地方
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)”
检查和抛出可以添加到解析器代码中,该代码解析'mutation!' https://github.com/clojure/clojurescript/blob/6eedd0a08c49f7b0d4dcb30977b2fb38c90577bd/src/main/clojure/cljs/analyzer.cljc#L2229
在解析器代码中,对于'if'的类似抛出示例见:https://github.com/clojure/clojurescript/blob/6eedd0a08c49f7b0d4dcb30977b2fb38c90577bd/src/main/clojure/cljs/analyzer.cljc#L1446-L1449 https://github.com/clojure/clojurescript/blob/master/src/test/clojure/cljs/analyzer_tests.clj
可以在{{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 发表
代码表明传递三个参数实际上是有效的。
(set! o -prop val) (set! (.-prop o) val)
评论者:mfikes
哦,对,托马斯。我会更新描述。
Hyunwoo:是的
评论者:sulami
希望这能达到效果(希望如此)。已在我机器上验证,它使用我所有项目都能构建和运行。
嗨,罗宾。感谢你的贡献。你签署CA了吗?
我只是刚刚签好的,是的。
CLJS-2923.patch LGTM。它表现正常,并能通过CI和Canary测试。