其他Clojure项目源文件

时间:2012-11-07 14:32:17

标签: clojure leiningen

当lein设置项目时,会创建core.clj文件以及其他目录和文件。我想知道我是否可以将core.clj的内容拆分为

下的另一个源文件

../myproj/src/myproj/

如果是,如何从core.clj访问该数据。

3 个答案:

答案 0 :(得分:5)

IIRC(我没有方便检查的项目),src/myproj/目录中的所有内容都在'myproj命名空间中。因此,您的core.clj文件将位于命名空间'myproj.core中。其他文件将位于'myproj命名空间内的自己的命名空间中(例如'myproj.other-fileother_file.clj),并且可以通过执行以下操作进入core.clj

(use 'myproj.other-file)

或者,在ns声明中:

(ns myproj.core
  (:use [myproj.other-file]))

答案 1 :(得分:4)

您可以根据需要在多个文件中拆分定义,但将单个命名空间放在单个文件中是惯用的,反之亦然。

有关如何命名和加载文件和命名空间的信息,请参阅http://clojure.org/libs。要记住的一件事是命名空间中的破折号转换为文件名中的下划线。

答案 2 :(得分:1)

Leiningen的 project.clj 是定义一个项目 var,它只不过是一个带有表示项目参数的键的地图(这是Clojure中使用 def的成语[name] 使用 [name] 名称创建一个var,它通常是一个地图 - 最基本但非常有用的数据结构。)

有关默认值,请参阅Leiningen 2源代码中的defaults var。

话说回来之前,在你调用defproject宏之前,你可以在project.clj中做任何你想做的事 - 毕竟它是一个Clojure脚本,你的想象力(和Clojure的熟悉程度)只是可以约束的您。事实上,你可以在创建后使用var做任何你想做的事情。将project.clj想象成一个管理项目的Clojure应用程序。

作为一个例子,在Leiningen 2中引入配置文件之前,有一个“技巧”,即具有公共依赖关系的单个var:dependencies和:dev-dependencies属性。只是为了再次发出警告 - 在Leiningen 2中不再需要它,因为它提供了配置文件。如果您对过去的情况感到好奇,请阅读Testing your project against multiple versions of Clojure