Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs clojure.tools.namespace全部刷新后clojure.repl命名空间丢失_Emacs_Clojure - Fatal编程技术网

Emacs clojure.tools.namespace全部刷新后clojure.repl命名空间丢失

Emacs clojure.tools.namespace全部刷新后clojure.repl命名空间丢失,emacs,clojure,Emacs,Clojure,我不确定这是预期的还是错误,但在运行(clojure.tools.namespace.repl/refresh all)之后,clojure.repl命名空间将丢失 nREPL服务器在主机127.0.0.1上的端口61579上启动nrepl://127.0.0.1:61579 回复-y 0.3.5,nREPL 0.2.7 Clojure 1.6.0 testbed.core=>(文档映射) ------------------------- clojure.core/map ([f coll][

我不确定这是预期的还是错误,但在运行
(clojure.tools.namespace.repl/refresh all)
之后,
clojure.repl
命名空间将丢失

nREPL服务器在主机127.0.0.1上的端口61579上启动nrepl://127.0.0.1:61579
回复-y 0.3.5,nREPL 0.2.7
Clojure 1.6.0
testbed.core=>(文档映射)
-------------------------
clojure.core/map
([f coll][f c1 c2][f c1 c2 c3][f c1 c2 c3&colls])
返回一个懒惰的。。。
无
testbed.core=>(需要'clojure.tools.namespace.repl]
无
testbed.core=>(clojure.tools.namespace.repl/refresh all)
:重新加载(testbed.core testbed.core test)
:好的
testbed.core=>(文档映射)
CompilerException java.lang.RuntimeException:无法解析此上下文中的符号:doc,正在编译:(/private/var/folders/xs/jbvb_r6j07q8xtclwlcbm21h0000gn/T/form-init676459392444597503.clj:1:1)
testbed.core=>
我的project.clj非常简单:

(defproject测试平台“0.1.0-SNAPSHOT”
:description“修复:写入描述”
:url“http://example.com/FIXME"
:许可证{:名称“Eclipse公共许可证”
:url“http://www.eclipse.org/legal/epl-v10.html"}
:依赖项[[org.clojure/clojure“1.6.0”]]
:main^:跳过aot testbed.core
:目标路径“target/%s”
:profiles{:uberjar{:aot:all}
:dev{:dependencies[[org.clojure/tools.namespace“0.2.10”]})

有没有一个简单的方法来避免这种情况?运行Emacs/苹果酒时出现了特殊问题?

我记得有这个问题。虽然已经有一段时间了,但我记得我通过设置lein项目在名称空间
user
中启动repl并导入其他名称空间,而不是在项目名称空间中启动(由
:main
定义)

因此,我在我的
项目.clj
中添加了
:repl选项{:init ns user}
,并创建了一个项目
user.clj
——这确保了我需要的
clojure.repl
功能始终可用——如Stuart Sierra的帖子所述

会议:

user=> (doc +)
-------------------------
clojure.core/+
([] [x] [x y] [x y & more])
  Returns the sum of nums. (+) returns 0. Does not auto-promote
  longs, will throw on overflow. See also: +'
nil

user=> (clojure.tools.namespace.repl/refresh-all)
(...namespaces...)

user=> (doc +)
-------------------------
clojure.core/+
([] [x] [x y] [x y & more])
  Returns the sum of nums. (+) returns 0. Does not auto-promote
  longs, will throw on overflow. See also: +'
nil

这是一种变通方法,不是对行为的真正修复或解释。另一种方法是确保clojure.tools.namespace.repl/refresh all

在加载新名称空间之前销毁名称空间的当前内存版本。由于
doc
函数在启动时由REPL插入,并且未在源文件中定义,因此在重新加载时丢失

nREPL在初始名称空间中插入辅助函数,如
doc
,默认情况下,初始名称空间是应用程序的主名称空间。您可以通过在Leiningen概要文件中设置一个可选的初始名称空间来确保将这些函数插入其他位置

我还建议为名称空间创建一个实际的源文件,该名称空间包含在REPL上使用的helper函数。您可以在中找到有关如何执行此操作的说明