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,请设置合适的语言_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,请设置合适的语言_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,请设置合适的语言_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,请设置合适的语言_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$}}。我们应该对记录也这样做吗?

3 答案

0 投票

由 dnolen 发布的评论

由于 CLJS-1620 已完成,我们应该更深入地思考这个问题。

0 投票

由 grncdr 发布的评论

遇到一个有趣的错误,这可能是这个问题的后果:

cljs.user=> (defrecord T [arguments]) cljs.user/T cljs.user=> (= (T. [1]) (T. [0])) true

0 投票
参考: https://clojure.atlassian.net/browse/CLJS-2236(由tonsky报告)
...