请在 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! 支持三个参数的形式,因此 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票数
参考:[https://clojure.atlassian.net/browse/CLJS-2923](https://clojure.atlassian.net/browse/CLJS-2923)(由mfikes报告)
...