欢迎!请参阅 关于 页面获取更多有关这种情况的信息。
以下情况中,第一和最后一个应该抛出异常
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
可以在 {{cljs.analyzer-tests}} 中添加测试(通过 {{lein test}} 运行):https://github.com/clojure/clojurescript/blob/master/src/test/clojure/cljs/analyzer_tests.clj
评论由:namenu发表
set! 支持 3-arity 形式,所以 Clojure 中错误信息可能是语法错误的。
set!
直接抛出错误像是 {{'if'}} 是可以的吗?
评论由:thheller 发表
代码表明传递 3 个参数实际上是有效的。
(set! o -prop val) (set! (.-prop o) val)
评论人:mfikes
对了,托马斯。我会更新描述。
Hyunwoo:是的
评论人:sulami
希望这能解决问题(希望如此)。已在我机器上验证了它能构建且在所有项目中都可以工作。
嗨,罗宾。感谢你的贡献。你已经签署了CA了吗?
我刚刚签了。
CLJS-2923.patch LGTM。它表现良好,并通过了CI和Canary测试。