欢迎!请参阅关于页面,了解更多有关如何使用本网站的信息。
以下情况中,首尾应该抛出异常
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
类似的抛出异常的例子在'if'的分析器代码中。 https://github.com/clojure/clojurescript/blob/6eedd0a08c49f7b0d4dcb30977b2fb38c90577bd/src/main/clojure/cljs/analyzer.cljc#L1446-L1449
可以在{{cljs.analyzer-tests}}中添加测试,该测试是由{{lein test}}执行的:https://github.com/clojure/clojurescript/blob/master/src/test/clojure/cljs/analyzer_tests.clj
评论者:namenu
set!支持3参数形式,所以Clojure的错误消息可能在语法上不正确。
set!
抛出错误像{{'if'}}一样好吗?
评论者:thheller
代码表明传递3个参数实际上是有效的。
(set! o -prop val) (set! (.-prop o) val)
评论者:mfikes
哎,没错,托马斯。我会更新描述。
Hyunwoo:是的
评论人:sulami
这应该就解决了(希望如此)。已验证在我的机器上所有项目都能构建和运行。
嗨,罗宾。感谢你的贡献。你签了CA吗?
刚好签了。
CLJS-2923.patch LGTM. 它行为正确,在CI和Canary测试中通过了。