当lein设置项目时,会创建core.clj文件以及其他目录和文件。我想知道我是否可以将core.clj的内容拆分为
下的另一个源文件 ../myproj/src/myproj/
如果是,如何从core.clj访问该数据。
答案 0 :(得分:5)
IIRC(我没有方便检查的项目),src/myproj/
目录中的所有内容都在'myproj
命名空间中。因此,您的core.clj
文件将位于命名空间'myproj.core
中。其他文件将位于'myproj
命名空间内的自己的命名空间中(例如'myproj.other-file
为other_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。