首页 文章

Clojure REPL忘记了classpath

提问于
浏览
0

我是一个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 .

那么为什么会这样呢?为什么导入不是第一次工作,而是第三次成功?

1 回答

  • 1

    我认为文件路径和命名空间之间存在直接关系 . 文件 src/counter_window.clj 应该具有名称空间声明 (ns counter-window) .

    应在文件 src/misc/counter_window.clj 中定义名称空间 misc.counter-window . 即它的形式为 (ns misc.counter-window) . 请注意 miscsrc 内的文件夹 . 您的项目可以命名为任何名称,我认为它不会影响命名空间 .

    假设您想要的是命名空间 misc.counter-window ,并且您的文件相应地位于 src/misc/counter_window.clj ,以下工作在repl中

    (use '[misc.counter-window])
    

相关问题