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-arity 形式,所以 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报告)
...