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
参考:[https://clojure.atlassian.net/browse/CLJS-2923](https://clojure.atlassian.net/browse/CLJS-2923)(由mfikes报告)
...