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发表

Ahh,甚至Clojure也不会让你走“允许以点开头的符号”的道路,如果你这样做

(def .quux inc) (.quux 1)

因此,我建议将 {{(println .aJSMethod)}} 和 {{(def .aJSMethod "hello")}} 视为无效代码,其根本原因是在尝试使用保留符号。

0
by
参考: https://clojure.atlassian.net/browse/CLJS-2070 (由 alex+import 报告)
...