欢迎!请查看关于页面以获取更多关于如何使用本站的信息。
{{(println .aJSMethod)}}产生{{cljs.core.println.call(null,.aJSMethod);}},这不是有效的JavaScript。
评论来自: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一样处理此类情况。或者,可以触发分析错误,用于不在操作符位置的保留符号。
即使Clojure也不会允许你执行“允许以点开始的符号”这一路径,如果你这样做:
(def .quux inc) (.quux 1)
因此,我认为应该将{{(println .aJSMethod)}}和{{(def .aJSMethod "hello")}}视为无效代码,其潜在原因在于试图使用保留符号。