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 发布

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

0

评论由:sulami 发布

我刚刚签署了。

0

评论由:mfikes 发布

CLJS-2923.patch LGTM。它表现正常,通过了CI和Canary测试。

0
...