当 lein 建立一个项目时,会创建一个 core.clj 文件以及其他目录和文件。我想知道是否可以将 core.clj 的内容拆分到另一个源文件
../myproj/src/myproj/
如果是这样,如何从 core.clj 访问该数据。
IIRC(我没有方便检查的项目),您src/myproj/
目录中的所有内容都在'myproj
命名空间中。所以你的core.clj
文件将在命名空间中'myproj.core
。其他文件将位于命名空间内的它们自己的命名'myproj
空间中(例如'myproj.other-file
for other_file.clj
),并且可以通过以下方式拉入core.clj
:
(use 'myproj.other-file)
或者,在ns
声明中:
(ns myproj.core
(:use [myproj.other-file]))
您可以将定义拆分到任意数量的文件中,尽管将单个命名空间放在单个文件中是惯用的,反之亦然。
有关如何命名和加载文件和命名空间的信息,请参见http://clojure.org/libs 。要记住的一件事是,命名空间中的破折号转换为文件名中的下划线。
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 中不再需要它,因为它提供了配置文件功能。如果您对过去的情况感到好奇,请阅读针对 Clojure 的多个版本测试您的项目。