欢迎!请参阅关于页面以获取更多关于这个功能的信息。
{{(println .aJSMethod)}} produces {{cljs.core.println.call(null,.aJSMethod);}}, which is not valid 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")}}视为无效代码,其根本原因是尝试使用保留符号。