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

欢迎!有关如何工作的更多详细信息,请参阅 关于 页面。

0 投票
ClojureScript
我可以用符号 {{&}} 来命名一些东西,但当我尝试调用它时,会抛出以下异常


线程 "main" 中异常:clojure.lang.ExceptionInfo: 编译失败文件:src/amp/core.cljs {:file #object[java.io.File 0x5e63cad "src/amp/core.cljs"]}, 编译:(/home/madstap/code/ampersand/build.clj:3:1)
    在 clojure.lang.Compiler.load(Compiler.java:7391)
    在 clojure.lang.Compiler.loadFile(Compiler.java:7317)
    在 clojure.main$load_script.invokeStatic(main.clj:275)
    在 clojure.main$script_opt.invokeStatic(main.clj:335)
    在 clojure.main$script_opt.invoke(main.clj:330)
    在 clojure.main$main.invokeStatic(main.clj:421)
    在 clojure.main$main.doInvoke(main.clj:384)
    在 clojure.lang.RestFn.invoke(RestFn.java:408)
    在 clojure.lang.Var.invoke(Var.java:379)
    在 clojure.lang.AFn.applyToHelper(AFn.java:154)
    在 clojure.lang.Var.applyTo(Var.java:700)
    在 clojure.main.main(main.java:37)
原因:clojure.lang.ExceptionInfo: 编译失败文件:src/amp/core.cljs {:file #object[java.io.File 0x5e63cad "src/amp/core.cljs"]}
    在 clojure.core$ex_info.invokeStatic(core.clj:4617)
    在 cljs.compiler$compile_file$fn__3147.invoke(compiler.cljc:1406)
    在 cljs.compiler$compile_file.invokeStatic(compiler.cljc:1376)
    在 cljs.closure$compile_file.invokeStatic(closure.clj:430)
    在 cljs.closure$fn__4204.invokeStatic(closure.clj:497)
    在 cljs.closure$fn__4204.invoke(closure.clj:493)
    在 cljs.closure$fn__4146$G__4139__4153.invoke(closure.clj:389)
    在 cljs.closure$compile_sources$iter__4315__4319$fn__4320.invoke(closure.clj:829)
    在 clojure.lang.LazySeq.sval(LazySeq.java:40)
    在 clojure.lang.LazySeq.seq(LazySeq.java:49)
    在 clojure.lang.Cons.next(Cons.java:39)
    在 clojure.lang.RT.next(RT.java:688)
    在 clojure.core$next__4341.invokeStatic(core.clj:64)
    在 clojure.core$dorun.invokeStatic(core.clj:3033)
    在 clojure.core$doall.invokeStatic(core.clj:3039)
    在 cljs.closure$compile_sources.invokeStatic(closure.clj:826)
    在 cljs.closure$build.invokeStatic(closure.clj:1942)
    在 cljs.build.api$build.invokeStatic(api.clj:198)
    在 cljs.build.api$build.invoke(api.clj:187)
    在 cljs.build.api$build.invokeStatic(api.clj:190)
    在 cljs.build.api$build.invoke(api.clj:187)
    在 user$eval24.invokeStatic(build.clj:3)
    在 user$eval24.invoke(build.clj:3)
    在 clojure.lang.Compiler.eval(Compiler.java:6927)
    在 clojure.lang.Compiler.load(Compiler.java:7379)
    ... 11 more
原因:clojure.lang.ExceptionInfo: multimethod 'parse' 中没有与调度值:& 匹配的方法,文件 src/amp/core.cljs {:file "src/amp/core.cljs", :line 5, :column 1, :tag :cljs/analysis-error}
    在 clojure.core$ex_info.invokeStatic(core.clj:4617)
    在 cljs.analyzer_ERROR.invokeStatic(analyzer.cljc:628)
    在 cljs.analyzer$analyze_seq_STAR__wrap.invokeStatic(analyzer.cljc:2871)
    在 cljs.analyzer$analyze_seq.invokeStatic(analyzer.cljc:2892)
    在 cljs.analyzer$analyze_form.invokeStatic(analyzer.cljc:3011)
    在 cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:3056)
    在 cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3073)
    在 cljs.compiler$emit_source.invokeStatic(compiler.cljc:1255)
    在 cljs.compiler$compile_file_STAR_$fn__3124.invoke(compiler.cljc:1325)
    在 cljs.compiler$with_core_cljs.invokeStatic(compiler.cljc:1159)
    在 cljs.compiler$compile_file_STAR_.invokeStatic(compiler.cljc:1316)
    在 cljs.compiler$compile_file$fn__3147.invoke(compiler.cljc:1396)
    ... 除此之外还有34个更多
原因:java.lang.IllegalArgumentException: 在多方法 'parse' 中没有方法为派遣值:&
    在 clojure.lang.MultiFn.getFn(MultiFn.java:156)
    在 clojure.lang.MultiFn.invoke(MultiFn.java:251)
    在 cljs.analyzer$analyze_seq_STAR_.invokeStatic(analyzer.cljc:2867)
    在 cljs.analyzer$analyze_seq_STAR__wrap.invokeStatic(analyzer.cljc:2870)
    ... 除此之外还有43个更多

3 答案

0 投票

评论由:madstap

更好的解释,因为我无法编辑描述:https://gist.github.com/madstap/c77581185afa7fea8bbf2556f2d9fafe

0 投票
_评论由:mfikes_

如果 ClojureScript 的符号遵循 Clojure 的约束(https://clojure.org/reference/reader#_symbols),那么 {{&}} 不是有效的符号。

当然,(type (second (second '(fn [f & r])))) 是 {{cljs.core/Symbol}},但这可能是一个例外,保留给 Clojure 使用。
0 投票
参考:https://clojure.atlassian.net/browse/CLJS-1889(由 alex+import 报告)
...