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

欢迎!有关此功能的更多信息,请参阅关于页面。

0
ClojureScript

{{(println .aJSMethod)}} 生成 {{cljs.core.println.call(null,.aJSMethod);}},这不符合有效的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 报告)
...