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

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

0
ClojureScript
自从 Om `1.9.293` 开始,我遇到了一些编译问题,我能够将其缩小到这段代码


(defn f [{:keys [a] :or {a #js {}}}])


上面的代码当项目中包含 [com.cognitect/transit-clj "0.8.290"] 作为依赖时无法编译。问题似乎发生在我们尝试在函数参数中对数据进行解构,使用 `:or` 并且在 `:or` 的一部分含有 `#js`。

我在这里创建了一个最小案例的存储库: https://github.com/wilkerlucio/cljs-compilation-fail

编译时错误堆栈


Wilkers-MacBook-Pro:cljs-compile-bug wilkerlucio$ lein clean && lein cljsbuild once site
编译 ClojureScript...
从 ["src"] 编译 "resources/public/site/site.js"...
编译 "resources/public/site/site.js" 失败。
clojure.lang.ExceptionInfo: 编译文件时失败:src/cljs_compile_bug/core.cljs {:file #object[java.io.File 0x21399e53 "src/cljs_compile_bug/core.cljs"]}
        at clojure.core$ex_info.invokeStatic(core.clj:4725)
        at clojure.core$ex_info.invoke(core.clj:4725)
        at cljs.compiler$compile_file$fn__4104.invoke(compiler.cljc:1410)
        at cljs.compiler$compile_file.invokeStatic(compiler.cljc:1376)
        at cljs.compiler$compile_file.invoke(compiler.cljc:1356)
        at cljs.closure$compile_file.invokeStatic(closure.clj:432)
        at cljs.closure$compile_file.invoke(closure.clj:423)
        at cljs.closure$eval6005$fn__6006.invoke(closure.clj:499)
        at cljs.closure$eval5941$fn__5942$G__5930__5949.invoke(closure.clj:389)
        at cljs.closure$compile_task$fn__6096.invoke(closure.clj:779)
        at cljs.closure$compile_task.invokeStatic(closure.clj:777)
        at cljs.closure$compile_task.invoke(closure.clj:770)
        at cljs.closure$parallel_compile_sources$fn__6102.invoke(closure.clj:806)
        at clojure.lang.AFn.applyToHelper(AFn.java:152)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.core$apply.invokeStatic(core.clj:657)
        at clojure.core$with_bindings_STAR_.invokeStatic(core.clj:1963)
        at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1963)
        at clojure.lang.RestFn.invoke(RestFn.java:425)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at cljs.closure$eval5941$fn__5942$G__5930__5949.invoke(closure.clj:389)
        at cljs.closure$compile_task$fn__6096.invoke(closure.clj:779)
        at cljs.closure$compile_task.invokeStatic(closure.clj:777)
        at cljs.closure$compile_task.invoke(closure.clj:770)
        at cljs.closure$parallel_compile_sources$fn__6102.invoke(closure.clj:806)
        在java.util.concurrent.ThreadPoolExecutor.java的1142行调用runWorker方法
        在java.util.concurrent.ThreadPoolExecutor$Worker.java的617行调用run方法
        在java.lang.Thread.java的745行调用run方法
异常原因:java.lang.RuntimeException: clojure.lang.ArityException: 传递给analyzer/fn--1412/fn--1413的参数个数不正确(应为1)
        在com.cognitect.transit.impl.WriterFactory.java的64行调用write方法
        在cognitect.transit.clj的149行调用静态方法write
        在cognitect.transit.clj的146行调用write方法
        在cljs.analyzer.cljc的3320行调用静态方法write_analysis_cache
        在cljs.analyzer.cljc的3307行调用write_analysis_cache方法
        在cljs.compiler.cljc的1307行调用静态方法emit_source
        在cljs.compiler.cljc的1237行调用emit_source方法
        在cljs.compiler.cljc的1328行调用compile_file_STAR_$fn__4081
        在cljs.compiler.cljc的1159行调用静态方法with_core_cljs
        在cljs.compiler.cljc的1150行调用with_core_cljs方法
        在cljs.compiler.cljc的1317行调用静态方法compile_file_Star_
        在cljs.compiler.cljc的1313行调用compile_file_Star_方法
        在cljs.compiler.cljc的1398行调用compile_file$fn__4104
        ... 25 more
异常原因:clojure.lang.ArityException: 传递给analyzer/fn--1412/fn--1413的参数个数不正确(应为1)
        在clojure.lang.AFn.java的429行调用throwArity
        在clojure.lang.AFn.java的32行调用invoke
        在cognitect.transit.clj的79行调用tag
        在com.cognitect.transit.impl.AbstractEmitter.java的147行调用marshal
        在com.cognitect.transit.impl.JsonEmitter.java的158行调用emitMap
        在com.cognitect.transit.impl.AbstractEmitter.java的70行调用emitMap
        在com.cognitect.transit.impl.AbstractEmitter.java的166行调用marshal
        在com.cognitect.transit.impl.JsonEmitter.java的158行调用emitMap
        在com.cognitect.transit.impl.AbstractEmitter.java的70行调用emitMap
        在com.cognitect.transit.impl.AbstractEmitter.java的166行调用marshal
        在com.cognitect.transit.impl.AbstractEmitter.java的82行调用emitArray
        在com.cognitect.transit.impl.AbstractEmitter.java的164行调用marshal
        在com.cognitect.transit.impl.AbstractEmitter.java的87行调用emitArray
        在com.cognitect.transit.impl.AbstractEmitter.java的164行调用marshal
        在com.cognitect.transit.impl.AbstractEmitter.java的34行调用emitTagged
        在com.cognitect.transit.impl.AbstractEmitter.java的59行调用emitEncoded
        在com.cognitect.transit.impl.AbstractEmitter.java的169行调用marshal
        在com.cognitect.transit.impl.AbstractEmitter.java的87行调用emitArray
        在com.cognitect.transit.impl.AbstractEmitter.java的164行调用marshal
        在com.cognitect.transit.impl.AbstractEmitter.java的34行调用emitTagged
        在com.cognitect.transit.impl.AbstractEmitter.java的59行调用emitEncoded
        在com.cognitect.transit.impl.AbstractEmitter.java的169行调用marshal
        在com.cognitect.transit.impl.JsonEmitter.java的158行调用emitMap
        在com.cognitect.transit.impl.AbstractEmitter.java的70行调用emitMap
        在com.cognitect.transit.impl.AbstractEmitter.java的166行调用marshal
        在com.cognitect.transit.impl.JsonEmitter.java的158行调用emitMap
        在com.cognitect.transit.impl.AbstractEmitter.java的70行调用emitMap
        在com.cognitect.transit.impl.AbstractEmitter.java的166行调用marshal
        在com.cognitect.transit.impl.JsonEmitter.java的158行调用emitMap
        在com.cognitect.transit.impl.AbstractEmitter.java的70行调用emitMap
        在com.cognitect.transit.impl.AbstractEmitter.java的166行调用marshal
        在com.cognitect.transit.impl.JsonEmitter.java的158行调用emitMap
        在com.cognitect.transit.impl.AbstractEmitter.java的70行调用emitMap
        在com.cognitect.transit.impl.AbstractEmitter.java的166行调用marshal
        在com.cognitect.transit.impl.AbstractEmitter.java的193行调用marshalTop
        在com.cognitect.transit.impl.JsonEmitter.java的28行调用emit
        在com.cognitect.transit.impl.WriterFactory.java的61行调用write
        ... 37 more
子进程失败

1 答案

0
参考:[https://clojure.atlassian.net/browse/CLJS-1832](https://clojure.atlassian.net/browse/CLJS-1832)(由wilkerlucio报告)
...