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

欢迎!有关如何使用本站的更多信息,请参阅 关于 页面。

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 constructor === other13203.constructor)) && (cljs.core.assertEquals(this13202.with,other13203.with)) && (cljs.core.assertEquals(this13202.in,other13203.in)) && (cljs.core.equals(this13202.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 constructor === other13203.constructor)) && (cljs.core.assertEquals(this13202.with,other13203.with)) && (cljs.core.assertEquals(this13202.in,other13203.in)) && (cljs.core.equals(this13202.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 constructor === other13203.constructor)) && (cljs.core.assertEquals(this13202.with,other13203.with)) && (cljs.core.assertEquals(this13202.in,other13203.in)) && (cljs.core.equals(this13202.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 constructor === other13203.constructor)) && (cljs.core.assertEquals(this13202.with,other13203.with)) && (cljs.core.assertEquals(this13202.in,other13203.in)) && (cljs.core.equals(this13202.extmap,other13203.__extmap));

                                                                                                                                                                                                                                                           ^

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

可能需要进行一些名称转义?我看到 {{(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报告)
...