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

欢迎!请参阅关于页面,了解更多有关如何使用本网站的信息。

0
ClojureScript

以下情况中,首尾应该抛出异常

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

9 个答案

0

评论者:namenu

set!支持3参数形式,所以Clojure的错误消息可能在语法上不正确。

抛出错误像{{'if'}}一样好吗?

0

评论者:thheller

代码表明传递3个参数实际上是有效的。

(set! o -prop val) (set! (.-prop o) val)

0

评论者:mfikes

哎,没错,托马斯。我会更新描述。

0

评论者:mfikes

Hyunwoo:是的

0

评论人:sulami

这应该就解决了(希望如此)。已验证在我的机器上所有项目都能构建和运行。

0

评论者:mfikes

嗨,罗宾。感谢你的贡献。你签了CA吗?

0

评论人:sulami

刚好签了。

0

评论者:mfikes

CLJS-2923.patch LGTM. 它行为正确,在CI和Canary测试中通过了。

0
...