请分享您的想法,参加2024年Clojure调查!

欢迎!有关如何操作的信息,请参阅关于页面。

0
ClojureScript

仅仅报告以下在repl(在Clojure中可以工作)中不起作用

`
(ns first.namespace)
(def a 4)
(ns second.es)
(require 'first.namespace) ;; 使用:reload也是一样
java.lang.IllegalArgumentException: 命名空间 first.namespace 不存在

at cljs.closure$source_for_namespace.invoke(closure.clj:605)
at cljs.repl$load_namespace.invoke(repl.cljc:182)
at cljs.repl$load_dependencies.invoke(repl.cljc:206)
at cljs.repl$evaluate_form.invoke(repl.cljc:474)
at cljs.repl$fn__4470$self__4482.invoke(repl.cljc:673)
at clojure.lang.AFn.applyToHelper(AFn.java:165)
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.core$apply.invoke(core.clj:630)
at cljs.repl$wrap_self$g__4450.invoke(repl.cljc:630)
at cljs.repl$repl_STAR_$read_eval_print__4536.invoke(repl.cljc:854)
at cljs.repl$repl_STAR_$fn__4542$fn__4551.invoke(repl.cljc:895)
at cljs.repl$repl_STAR_$fn__4542.invoke(repl.cljc:894)
at cljs.compiler$with_core_cljs.invoke(compiler.cljc:1146)
at cljs.repl$repl_STAR_.invoke(repl.cljc:858)
at cljs.repl$repl.doInvoke(repl.cljc:976)
at clojure.lang.RestFn.invoke(RestFn.java:410)
at cljsbuild.repl.rhino$run_repl_rhino.invoke(rhino.clj:8)
at user$eval4946.invoke(form-init5490341798700416710.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6782)
at clojure.lang.Compiler.eval(Compiler.java:6772)
at clojure.lang.Compiler.load(Compiler.java:7227)
at clojure.lang.Compiler.loadFile(Compiler.java:7165)
at clojure.main$load_script.invoke(main.clj:275)
at clojure.main$init_opt.invoke(main.clj:280)
at clojure.main$initialize.invoke(main.clj:308)
at clojure.main$null_opt.invoke(main.clj:343)
at clojure.main$main.doInvoke(main.clj:421)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:383)
at clojure.lang.AFn.applyToHelper(AFn.java:156)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)

`

我愿意进一步调查这个问题并/或负责解决这个问题。

5 答案

0

评论者:arichiardi

对不起出了错误...如何编辑?

0

评论者:arichiardi

已在NodeJs repl中使用确认

`

ClojureScript Node.js REPL服务器侦听51885
编译日志完整可查,见:out/watch.log
退出,请输入::cljs/quit
cljs.user=> (in-ns 'ns.core)
nil
ns.core=> (def a 3)

'ns.core/a

ns.core=> (in-ns 's.core.repl)
nil
s.core.repl=> (require 'ns.core)
java.lang.IllegalArgumentException: 命名空间 ns.core 不存在

at cljs.closure$source_for_namespace.invoke(closure.clj:605)
at cljs.repl$load_namespace.invoke(repl.cljc:182)
at cljs.repl$load_dependencies.invoke(repl.cljc:206)
at cljs.repl$evaluate_form.invoke(repl.cljc:474)
at cljs.repl$fn__4583$self__4595.invoke(repl.cljc:673)
at clojure.lang.AFn.applyToHelper(AFn.java:165)
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.core$apply.invoke(core.clj:630)
at cljs.repl$wrap_self$g__4563.invoke(repl.cljc:630)
at cljs.repl$repl_STAR_$read_eval_print__4649.invoke(repl.cljc:854)
at cljs.repl$repl_STAR_$fn__4655$fn__4664.invoke(repl.cljc:895)
at cljs.repl$repl_STAR_$fn__4655.invoke(repl.cljc:894)
at cljs.compiler$with_core_cljs.invoke(compiler.cljc:1146)
at cljs.repl$repl_STAR_.invoke(repl.cljc:858)
at cljs.repl$repl.doInvoke(repl.cljc:976)
at clojure.lang.RestFn.invoke(RestFn.java:486)
at user$eval44.invoke(node_repl.clj:10)
at clojure.lang.Compiler.eval(Compiler.java:6782)
at clojure.lang.Compiler.load(Compiler.java:7227)
at clojure.lang.Compiler.loadFile(Compiler.java:7165)
at clojure.main$load_script.invoke(main.clj:275)
at clojure.main$script_opt.invoke(main.clj:337)
at clojure.main$main.doInvoke(main.clj:421)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:379)
at clojure.lang.AFn.applyToHelper(AFn.java:154)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)

`

0

评论者:arichiardi

我认为应该是每个 repl-env 和其 -evaluate 负责加载正确的吧?这可能是每一个 **load-fn** 都有问题吗?

0
by
_由 arichiardi 评论_

我正在分析 `cljs.repl/load-namespace`,看起来它只处理从源代码加载。


第 178 行 @ ClojureScript 1.7.158

 源代码 (cljsc/add-dependencies
                   (merge (env->opts repl-env) opts)
                   {:requires [(name ns)]
                    :type :seed
                    :url (:uri (cljsc/source-for-namespace
                                 ns env/*compiler*)))



函数 `cljs.closure/source-for-namespace` 抛出异常,因为它当然无法找到手动创建的空间的源代码。
一个想法可能是改变 `cljs.closure/source-for-namespace` 并在没有找到源代码时返回 nil。
然后改变 `cljs.repl/load-namespace` 以在 `souces` 为 nil 时检查已创建的空间。

Mike 告诉我命名空间没有被实例化,所以下一个问题是,是否存在一个包含所有已创建命名空间的原子?

我将等待大家的反馈,当然是在大家都有时间的时候。
0
by
参考:[https://clojure.atlassian.net/browse/CLJS-1473](https://clojure.atlassian.net/browse/CLJS-1473)(由 arichiardireported)
...