gpt4 book ai didi

clojure - 如何使用 leiningen 引用其他文件中的函数?

转载 作者:行者123 更新时间:2023-12-02 07:07:51 24 4
gpt4 key购买 nike

我对 Clojure 还很陌生,所以如果这是一个完全新手的问题,但我无法在网上找到足够的答案,我深表歉意。

基本上,我的问题是,每当我尝试运行我的项目时,都会收到如下错误:

Exception in thread "main" java.lang.RuntimeException: java.io.FileNotFoundException: Could not locate greeter__init.class or greeter.clj on classpath: 

在本例中,greeter.clj 位于项目中与包含我的 main 函数的文件位于同一目录中。

出于说明目的,我创建了一个具有如下目录树的项目:

enter image description here

我的 core.clj 代码如下:

(ns omg.core
(require [greeter]))

(defn -main[] (greet))

我的greeter.clj代码是:

(ns greeter)

(defn greet [] println("Hello world"))

每当我输入 lein run -m omg.core 时,我都会收到上面提到的异常。我做错了什么?

最佳答案

greeter 命名空间位于错误的级别

(ns omg.greeter)

命名空间中的名称与路径中的文件夹相对应,以便在以下位置使用该文件/src/omg/greeter.clj 该文件应包含 omg.greeter 命名空间。如果您只想将其称为 greeter,请将其向下移动一个文件夹

使用 require 时,您需要拼写出正在调用的函数的 namespace ,在本例中为 (omg.greeter/greet)。因为这很痛苦,所以 use 函数需要一个命名空间并将其所有函数添加到当前命名空间。另一个更具选择性的选项是在命名空间定义中使用带有 :refer 选项的 require

(ns omg.core
(require [omg.greeter :refer :all]))

(ns omg.core
(require [omg.greeter :refer [greet]]))

大多数人将命名空间要求放入文件顶部的 ns 调用中。

快速阅读http://clojure.org/namespaces希望能有所帮助

关于clojure - 如何使用 leiningen 引用其他文件中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10406044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com