2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!请参见关于 页面以了解更多有关此工作方式的信息。

0
ClojureScript

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

(defrecord Query [with in])

`
从 ["src"] 编译 "target/main.js"...
Jul 14, 2017 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)));

                                                                                                                                                        ^

Jul 14, 2017 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)));

                                                                                                                                                                        ^

Jul 14, 2017 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)));

                                                                                                                                                                                                                                              ^

Jul 14, 2017 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)));

                                                                                                                                                                                                                                                           ^

Jul 14, 2017 6:58:14 PM com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 0 error(s), 4 warning(s)
成功在 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默认使用语言_in=ES3?难道CLJS不应该锁定输出的JS版本吗?据我所知,程序员无法控制JS的外观,但CLJS编译器知道并控制输出的JS版本(并输入到Closure中)。换句话说,为什么默认将language_in设置为ES5呢?
0
...