请在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
参考: https://clojure.atlassian.net/browse/CLJS-2070 (由 alex+import 报告)
...