欢迎!请查看关于页面,了解如何使用本网站的一些信息。
{{(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。或者,也可以为不在操作位置上的保留符号触发分析错误。
Ahh,甚至Clojure也不会让你走“允许以点开头的符号”的道路,如果你这样做
(def .quux inc) (.quux 1)
因此,我建议将 {{(println .aJSMethod)}} 和 {{(def .aJSMethod "hello")}} 视为无效代码,其根本原因是在尝试使用保留符号。