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
by

评论由:mfikes 发布

啊哈,对啊,托马斯。我会更新描述。

0
by

评论由:mfikes 发布

Hyunwoo:是的

0
by

评论由:sulami 发布

这应该就能完成(我希望)。在我拥有的所有项目中,我已经验证它可以构建并工作。

0
by

评论由:mfikes 发布

嗨,Robin。感谢您的贡献。您签名了CA吗?

0
by

评论由:sulami 发布

是的,我刚刚签了。

0
by

评论由:mfikes 发布

CLJS-2923.patch LGTM。它表现正确,并且在CI和Canary测试中通过。

0
by
...