2024年Clojure状态调查中分享您的想法!

欢迎!请参阅关于页面以获取更多关于这个功能的信息。

0 投票
提问时间: 提问位置: ClojureScript 提问人:

{{(println .aJSMethod)}} produces {{cljs.core.println.call(null,.aJSMethod);}}, which is not valid JavaScript.

3 个答案

0 投票
回答时间: 回答人:

评论者:mfikes

为了清晰起见,可能不应将此视为点互操作。点互操作看起来像{{(. "a" toUpperCase)}}, 我们可以通过宏展开以传统方式写作{{(.toUpperCase "a")}}

我的意见是,将{{(println .aJSMethod)}}视为一个调用,其中{{.aJSMethod}}是一个符号。如果ClojureScript遵循https://clojure.org/reference/reader#_symbols中的符号定义,那么可以争辩说{{.aJSMethod}}是一个保留符号。

Clojure似乎没有机制来禁止使用保留符号。例如,你可以在Clojure中做以下操作。

(def .aJSMethod "hello") (println .aJSMethod)

也许ClojureScript可以对这种情况进行修改以更像是Clojure工作。或者,也许可以引发一个分析错误来标记不在操作位置中的保留符号。

0 投票
回答时间: 回答人:

评论者:mfikes

即使Clojure也不会允许你通过以下方式走“允许以点开头的符号”的道路

(def .quux inc) (.quux 1)

所以,我主张将{{(println .aJSMethod)}}和{{(def .aJSMethod "hello")}}视为无效代码,其根本原因是尝试使用保留符号。

0 投票
by
参考:https://clojure.atlassian.net/browse/CLJS-2070(由 alex+import 报告)
...