2024 Clojure 调查问卷!中分享您的想法。

欢迎!请参阅关于页面以了解有关此功能的一些更多信息。

0
ClojureScript

Defrecord 生成的代码与 ECMASCRIPT3 语言不兼容

(defrecord Query [with in])

`
从 ["src"] 编译 "target/main.js"...
2017-07-14 6:58:14 PM com.google.javascript.jscomp.LoggerErrorManager println
WARNING: /Users/prokopov/work/cljs-test/target/cljsbuild-compiler-0/cljs_test/core.js:117: WARNING - 旧版本 JavaScript 不允许未引用的属性名称中使用关键字和保留字。如果您要针对较新的 JavaScript 版本,请设置适当的 language_in 选项。
return (!((other13203 == null))) && ((this13202 $1.constructor === other13203.constructor)) && (cljs.core.EQ.cljs$core$IFn$_invoke$arity$2(this13202$1.with,other13203.with)) && (cljs.core.EQ.cljs$core$IFn$_invoke$arity$2(this13202$1.in,other13203.in)) && (cljs.core.EQ.cljs$core$IFn$_invoke$arity$2(this13202$1.extmap,other13203.__extmap)));

                                                                                                                                                        ^

2017-07-14 6:58:14 PM com.google.javascript.jscomp.LoggerErrorManager println
WARNING: /Users/prokopov/work/cljs-test/target/cljsbuild-compiler-0/cljs_test/core.js:117: WARNING - 旧版本 JavaScript 不允许未引用的属性名称中使用关键字和保留字。如果您要针对较新的 JavaScript 版本,请设置适当的 language_in 选项。
return (!((other13203 == null))) && ((this13202 $1.constructor === other13203.constructor)) && (cljs.core.EQ.cljs$core$IFn$_invoke$arity$2(this13202$1.with,other13203.with)) && (cljs.core.EQ.cljs$core$IFn$_invoke$arity$2(this13202$1.in,other13203.in)) && (cljs.core.EQ.cljs$core$IFn$_invoke$arity$2(this13202$1.extmap,other13203.__extmap)));

                                                                                                                                                                        ^

2017-07-14 6:58:14 PM com.google.javascript.jscomp.LoggerErrorManager println
WARNING: /Users/prokopov/work/cljs-test/target/cljsbuild-compiler-0/cljs_test/core.js:117: WARNING - 旧版本 JavaScript 不允许未引用的属性名称中使用关键字和保留字。如果您要针对较新的 JavaScript 版本,请设置适当的 language_in 选项。
return (!((other13203 == null))) && ((this13202 $1.constructor === other13203.constructor)) && (cljs.core.EQ.cljs$core$IFn$_invoke$arity$2(this13202$1.with,other13203.with)) && (cljs.core.EQ.cljs$core$IFn$_invoke$arity$2(this13202$1.in,other13203.in)) && (cljs.core.EQ.cljs$core$IFn$_invoke$arity$2(this13202$1.extmap,other13203.__extmap)));

                                                                                                                                                                                                                                              ^

2017-07-14 6:58:14 PM com.google.javascript.jscomp.LoggerErrorManager println
WARNING: /Users/prokopov/work/cljs-test/target/cljsbuild-compiler-0/cljs_test/core.js:117: WARNING - 旧版本 JavaScript 不允许未引用的属性名称中使用关键字和保留字。如果您要针对较新的 JavaScript 版本,请设置适当的 language_in 选项。
return (!((other13203 == null))) && ((this13202 $1.constructor === other13203.constructor)) && (cljs.core.EQ.cljs$core$IFn$_invoke$arity$2(this13202$1.with,other13203.with)) && (cljs.core.EQ.cljs$core$IFn$_invoke$arity$2(this13202$1.in,other13203.in)) && (cljs.core.EQ.cljs$core$IFn$_invoke$arity$2(this13202$1.extmap,other13203.__extmap)));

                                                                                                                                                                                                                                                           ^

2017-07-14 6:58:14 PM com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 0 个错误,4 个警告
成功在 6.224 秒内编译 "target/main.js"。
`

可能应该进行一些名称转义?我看到 {{(defn with [])}} 编译为 {{cljs-test.core.with$}}。我们要为记录做同样的事情吗?

4 个答案

0

由:dnolen

这个问题更多地与如何处理保留名称有关,而不是与记录有关。就我而言,Closure 警告已经足够了,但如果有人想设计一个警告补丁,在输出语言为 ES3 时警告在 deftype/record 上使用保留字段名称,那么请随意。

0

由:dnolen

相关 CLJS-871

0
_评论者:tonsky_

为什么 CLJS 默认使用 language_in=ES3?CLJS 不应该锁定其输出的 JS 版本吗?据我所知,程序员无法控制 JS 的外观,但 CLJS 编译器了解并控制其输出的 JS 版本(以及提供给 Closure 的版本)。换句话说,为什么不将默认的 language_in 设置为 ES5 呢?
0
参考:https://clojure.atlassian.net/browse/CLJS-2237(由 tonsky 报告)
...