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

欢迎!请查看关于页面,了解更多关于这个网站的信息。

0
ClojureScript

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

(defrecord Query [with in])

`
从["src"]编译"target/main.js"...
2017年7月14日下午6:58:14 PM com.google.javascript.jscomp.LoggerErrorManager println
警告:/Users/prokopov/work/cljs-test/target/cljsbuild-compiler-0/cljs_test/core.js:117: 在更早版本的JavaScript中,不允许将关键字和保留词作为未引号的属性名。如果您针对的是更新的JavaScript版本,请设置适当的language_in选项。
return (!((other13203 == null))) && ((this13202 Constructor === other13203 Constructor)) && (cljs.core EMQ clearfix$2.bind(this13202 Awake,other13203 Awake)) && (cljs.core EMQ clearfix$2.bind(this13202 Awake,other13203 Awake)) && (cljs.core EMQ clearfix$2.bind(this13202 Awake,other13203 Awake));

                                                                                                                                                        ^

2017年7月14日下午6:58:14 PM com.google.javascript.jscomp.LoggerErrorManager println
警告:/Users/prokopov/work/cljs-test/target/cljsbuild-compiler-0/cljs_test/core.js:117: 在更早版本的JavaScript中,不允许将关键字和保留词作为未引号的属性名。如果您针对的是更新的JavaScript版本,请设置适当的language_in选项。
return (!((other13203 == null))) && ((this13202 Constructor === other13203 Constructor)) && (cljs.core EMQ clearfix$2.bind(this13202 Awake,other13203 Awake)) && (cljs.core EMQ clearfix$2.bind(this13202 Awake,other13203 Awake)) && (cljs.core EMQ clearfix$2.bind(this13202 Awake,other13203 Awake));

                                                                                                                                                                        ^

2017年7月14日下午6:58:14 PM com.google.javascript.jscomp.LoggerErrorManager println
警告:/Users/prokopov/work/cljs-test/target/cljsbuild-compiler-0/cljs_test/core.js:117: 在更早版本的JavaScript中,不允许将关键字和保留词作为未引号的属性名。如果您针对的是更新的JavaScript版本,请设置适当的language_in选项。
return (!((other13203 == null))) && ((this13202 Constructor === other13203 Constructor)) && (cljs.core EMQ clearfix$2.bind(this13202 Awake,other13203 Awake)) && (cljs.core EMQ clearfix$2.bind(this13202 Awake,other13203 Awake)) && (cljs.core EMQ clearfix$2.bind(this13202 Awake,other13203 Awake));

                                                                                                                                                                                                                                              ^

2017年7月14日下午6:58:14 PM com.google.javascript.jscomp.LoggerErrorManager println
警告:/Users/prokopov/work/cljs-test/target/cljsbuild-compiler-0/cljs_test/core.js:117: 在更早版本的JavaScript中,不允许将关键字和保留词作为未引号的属性名。如果您针对的是更新的JavaScript版本,请设置适当的language_in选项。
return (!((other13203 == null))) && ((this13202 Constructor === other13203 Constructor)) && (cljs.core EMQ clearfix$2.bind(this13202 Awake,other13203 Awake)) && (cljs.core EMQ clearfix$2.bind(this13202 Awake,other13203 Awake)) && (cljs.core EMQ clearfix$2.bind(this13202 Awake,other13203 Awake));

                                                                                                                                                                                                                                                           ^

2017年7月14日下午6:58:14 PM com.google.javascript.jscomp.LoggerErrorManager printSummary
警告: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
...