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

欢迎!请查看 关于 页面以了解更多关于这是如何工作的信息。

0 已投票
ClojureScript

由于 -O 和 -t 采用一组枚举值,因此应该尽早验证它们。

这可以避免一些难以理解的错误报告。例如,用 {{adv}} 代替 {{advanced}} 会使程序以一种奇怪的方式崩溃

`
$ clj -m cljs.main -O adv -c chambered.core
警告::preloads 应仅在 :none 优化中指定
主线程中发生异常 java.lang.IllegalArgumentException: 没有为协议:‘#'(cljs.closure/Compilable)’找到实现方法::-find-sources 的类:nil

at clojure.core$_cache_protocol_fn.invokeStatic(core_deftype.clj:583)
at clojure.core$_cache_protocol_fn.invoke(core_deftype.clj:575)
at cljs.closure$eval6819$fn__6833$G__6810__6840.invoke(closure.clj:511)
at cljs.closure$build$fn__7680.invoke(closure.clj:2751)
at cljs.closure$build.invokeStatic(closure.clj:2750)
at cljs.closure$build.invoke(closure.clj:2663)
at cljs.build.api$build.invokeStatic(api.clj:205)
at cljs.build.api$build.invoke(api.clj:189)
at cljs.cli$default_compile.invokeStatic(cli.clj:391)
at cljs.cli$default_compile.invoke(cli.clj:361)
at cljs.cli$compile_opt.invokeStatic(cli.clj:398)
at cljs.cli$compile_opt.invoke(cli.clj:396)
at cljs.cli$main.invokeStatic(cli.clj:527)
at cljs.cli$main.doInvoke(cli.clj:516)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.core$apply.invokeStatic(core.clj:659)
at clojure.core$apply.invoke(core.clj:652)
at cljs.main$_main.invokeStatic(main.clj:60)
at cljs.main$_main.doInvoke(main.clj:52)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.lang.Var.applyTo(Var.java:702)
at clojure.core$apply.invokeStatic(core.clj:657)
at clojure.main$main_opt.invokeStatic(main.clj:317)
at clojure.main$main_opt.invoke(main.clj:313)
at clojure.main$main.invokeStatic(main.clj:424)
at clojure.main$main.doInvoke(main.clj:387)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.lang.Var.applyTo(Var.java:702)
at clojure.main.main(main.java:37)

`

3 条答案

0 已投票

评论由:mfikes 创建

附加的补丁可以工作,但有些地方我喜欢,有些地方我不喜欢。

声明性地将规格添加到命令中是件好事,并且增强了一些运行时功能来验证这些规格。

但是,尽管这感觉像是“输入验证”,另一个论点是,如果编译器将采用规格,则某些东西,如优化级别,可以在系统中更深层次(这将也会捕获编译器选项 edn 的误配置)。

无论如何,即使我对这个补丁不满意,我还是把它附上,以防它可以启发更好的方法。

以下是补丁中票描述例子的内容。

`
$ clj -m cljs.main -O adv -c chambered.core
主线程中异常 clojure.lang.ExceptionInfo: 无效级别:值:“adv” 未通过规格::cljs.cli/optmizations 的谓词:#{"none" "advanced" "whitespace" "simple"}
{}

at clojure.core$ex_info.invokeStatic(core.clj:4739)
at clojure.core$ex_info.invoke(core.clj:4739)
at cljs.cli$add_commands$maybe_wrap_fn__8772$fn__8774.invoke(cli.clj:424)
at cljs.cli$initialize$fn__8714.invoke(cli.clj:235)
at clojure.lang.PersistentVector.reduce(PersistentVector.java:341)
at clojure.core$reduce.invokeStatic(core.clj:6747)
at clojure.core$reduce.invoke(core.clj:6730)
at cljs.cli$initialize.invokeStatic(cli.clj:233)
at cljs.cli$initialize.invoke(cli.clj:230)
at cljs.cli$main.invokeStatic(cli.clj:543)
at cljs.cli$main.doInvoke(cli.clj:531)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.core$apply.invokeStatic(core.clj:659)
at clojure.core$apply.invoke(core.clj:652)
at cljs.main$_main.invokeStatic(main.clj:60)
at cljs.main$_main.doInvoke(main.clj:52)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.lang.Var.applyTo(Var.java:702)
at clojure.core$apply.invokeStatic(core.clj:657)
at clojure.main$main_opt.invokeStatic(main.clj:317)
at clojure.main$main_opt.invoke(main.clj:313)
at clojure.main$main.invokeStatic(main.clj:424)
at clojure.main$main.doInvoke(main.clj:387)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.lang.Var.applyTo(Var.java:702)
at clojure.main.main(main.java:37)

`

0 已投票

评论由:dnolen 创建

我们需要升级到 1.9,但我们并不真正需要这样做。我不小心在 {{pom.template.xml}} 文件中将其升级到 1.9.0。

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