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 个更多
原因:clojure.lang.ExceptionInfo: 多态方法 'parse' 中没有匹配派.SendMessage 类型的实例:& 在 src/amp/core.cljs 行 5 : :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 提出)
...