Clojure REPL 忘记类路径
Clojure REPL forgets classpath
我是一个 Clojure 新手,REPL 中的一些东西让我很困惑。
我有一个名为 "misc" 的项目和一个位于 "misc/src/counter_window.clj" 的命名空间。当我从项目根文件夹进入 REPL 时,我想导入 counter_window 的功能,但我似乎每次都必须经历以下奇怪的探戈:
user=> (use 'counter-window)
FileNotFoundException Could not locate counter_window__init.class or counter_window.clj on classpath. Please check that namespaces with dashes use underscores in the Clojure file name. clojure.lang.RT.load (RT.java:449)
user=> (use 'misc.counter-window)
CompilerException java.lang.Exception: namespace 'misc.counter-window' not found after loading '/misc/counter_window', compiling:(/tmp/form-init2530455467319465680.clj:1:1)
user=> (use 'counter-window)
nil ;; the import succeeds this third time.
FileNotFound 异常中的警告似乎不适用,因为命名空间已在 counter_window.clj 文件中调用 counter-window
。
那么为什么会这样呢?为什么第一次导入不成功,第三次就成功了?
我认为文件路径和命名空间之间存在直接关系。一个文件 src/counter_window.clj
应该有命名空间声明 (ns counter-window)
。
应在文件 src/misc/counter_window.clj
中定义命名空间 misc.counter-window
。即它将具有 (ns misc.counter-window)
的形式。请注意 misc
是 src
中的一个文件夹。您的项目可以命名为任何名称,我认为这不会影响名称空间。
假设您想要的是命名空间 misc.counter-window
并且您的文件相应地位于 src/misc/counter_window.clj
,以下在 repl
中起作用
(use '[misc.counter-window])
我是一个 Clojure 新手,REPL 中的一些东西让我很困惑。
我有一个名为 "misc" 的项目和一个位于 "misc/src/counter_window.clj" 的命名空间。当我从项目根文件夹进入 REPL 时,我想导入 counter_window 的功能,但我似乎每次都必须经历以下奇怪的探戈:
user=> (use 'counter-window)
FileNotFoundException Could not locate counter_window__init.class or counter_window.clj on classpath. Please check that namespaces with dashes use underscores in the Clojure file name. clojure.lang.RT.load (RT.java:449)
user=> (use 'misc.counter-window)
CompilerException java.lang.Exception: namespace 'misc.counter-window' not found after loading '/misc/counter_window', compiling:(/tmp/form-init2530455467319465680.clj:1:1)
user=> (use 'counter-window)
nil ;; the import succeeds this third time.
FileNotFound 异常中的警告似乎不适用,因为命名空间已在 counter_window.clj 文件中调用 counter-window
。
那么为什么会这样呢?为什么第一次导入不成功,第三次就成功了?
我认为文件路径和命名空间之间存在直接关系。一个文件 src/counter_window.clj
应该有命名空间声明 (ns counter-window)
。
应在文件 src/misc/counter_window.clj
中定义命名空间 misc.counter-window
。即它将具有 (ns misc.counter-window)
的形式。请注意 misc
是 src
中的一个文件夹。您的项目可以命名为任何名称,我认为这不会影响名称空间。
假设您想要的是命名空间 misc.counter-window
并且您的文件相应地位于 src/misc/counter_window.clj
,以下在 repl
(use '[misc.counter-window])