Clojure 2024 国家调查中分享你的想法!

欢迎!请访问关于页面以了解更多关于如何使用此功能的信息。

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。

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

0

评论由:sulami。

是的,我刚签了。

0

评论由:mfikes。

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

0
...