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
WARNING: /Users/prokopov/work/cljs-test/target/cljsbuild-compiler-0/cljs_test/core.js:117: WARNING - 关键词和保留字不允许作为未引号属性名在旧版本的JavaScript中。如果您针对新版本的JavaScript,请设置适当的语言_in选项。
�回调函数时不等为null) && (this13202constructor === other13203constructor) && (cljs.core.EQcore$IFn$_invoke$arity$2(this13202with,other13203with)) && (cljs.core.EQcore$IFn$_invoke$arity$2(this13202in,other13203in)) && (cljs.core.EQcore$IFn$_invoke$arity$2(this13202extmap,other13203__extmap));

                                                                                                                                                        ^

2017年7月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,请设置适当的语言_in选项。
�回调函数时不等为null) && (this13202constructor === other13203constructor) && (cljs.core.EQcore$IFn$_invoke$arity$2(this13202with,other13203with)) && (cljs.core.EQcore$IFn$_invoke$arity$2(this13202in,other13203in)) && (cljs.core.EQcore$IFn$_invoke$arity$2(this13202extmap,other13203__extmap));

                                                                                                                                                                        ^

2017年7月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,请设置适当的语言_in选项。
�回调函数时不等为null) && (this13202constructor === other13203constructor) && (cljs.core.EQcore$IFn$_invoke$arity$2(this13202with,other13203with)) && (cljs.core.EQcore$IFn$_invoke$arity$2(this13202in,other13203in)) && (cljs.core.EQcore$IFn$_invoke$arity$2(this13202extmap,other13203__extmap));

                                                                                                                                                                                                                                              ^

2017年7月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,请设置适当的语言_in选项。
�回调函数时不等为null) && (this13202constructor === other13203constructor) && (cljs.core.EQcore$IFn$_invoke$arity$2(this13202with,other13203with)) && (cljs.core.EQcore$IFn$_invoke$arity$2(this13202in,other13203in)) && (cljs.core.EQcore$IFn$_invoke$arity$2(this13202extmap,other13203__extmap));

                                                                                                                                                                                                                                                           ^

2017年7月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(由 tonesky 提出)
...