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 投票
by

评论由:mfikes发布

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

0 投票
by

评论由:mfikes发布

Hyunwoo: 是的

0 投票
by

评论由:sulami发布

希望这能解决问题(我已验证)。在我的机器上所有项目都验证了它能够构建和运行。

0 投票
by

评论由:mfikes发布

Hi Robin. 谢谢你的贡献。你已经签署CA了吗?

0 投票
by

评论由:sulami发布

是的,我刚刚签署过了。

0 投票
by

评论由:mfikes发布

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

0 投票
by
...