Car*_*zey 13 clojure classpath leiningen
我仍然是Clojure的新手所以我很抱歉这是一个全新的问题,但我无法在网上找到足够的答案.
基本上,我的问题是,每当我尝试运行我的项目时,我都会收到如下错误:
Exception in thread "main" java.lang.RuntimeException: java.io.FileNotFoundException: Could not locate greeter__init.class or greeter.clj on classpath:
Run Code Online (Sandbox Code Playgroud)
在这种情况下,greeter.clj在项目中与包含我的main函数的文件位于同一目录中.
为了便于说明,我创建了一个具有如下目录树的项目:

我的core.clj代码如下:
(ns omg.core
(require [greeter]))
(defn -main[] (greet))
Run Code Online (Sandbox Code Playgroud)
我的greeter.clj代码是:
(ns greeter)
(defn greet [] println("Hello world"))
Run Code Online (Sandbox Code Playgroud)
每当我输入时,lein run -m omg.core我都会得到上面提到的异常.我究竟做错了什么?
Art*_*ldt 16
它在错误的级别的greeter命名空间
(ns omg.greeter)
Run Code Online (Sandbox Code Playgroud)
命名空间中的名称对应于路径中的文件夹,因此要使用/src/omg/greeter.clj中的文件,该文件应包含omg.greeter命名空间.如果你想让它刚刚调用,greeter那么将其移动到一个文件夹
在使用时,require您需要拼出您正在调用的函数的命名空间,在这种情况下,这将是(omg.greeter/greet).由于这很痛苦,该use函数需要一个命名空间,并将其所有函数添加到当前命名空间.另一个更具选择性的选项是在命名空间定义中使用require和:refer选项
(ns omg.core
(require [omg.greeter :refer :all]))
Run Code Online (Sandbox Code Playgroud)
要么
(ns omg.core
(require [omg.greeter :refer [greet]]))
Run Code Online (Sandbox Code Playgroud)
大多数人将命名空间要求放在ns文件顶部的调用中.
快速阅读http://clojure.org/namespaces将有望提供帮助
| 归档时间: |
|
| 查看次数: |
3160 次 |
| 最近记录: |