【发布时间】:2012-11-07 14:32:16
【问题描述】:
当 lein 建立一个项目时,会创建一个 core.clj 文件以及其他目录和文件。我想知道是否可以将 core.clj 的内容拆分到
下的另一个源文件../myproj/src/myproj/
如果是这样,如何从 core.clj 访问该数据。
【问题讨论】:
当 lein 建立一个项目时,会创建一个 core.clj 文件以及其他目录和文件。我想知道是否可以将 core.clj 的内容拆分到
下的另一个源文件../myproj/src/myproj/
如果是这样,如何从 core.clj 访问该数据。
【问题讨论】:
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]))
【讨论】:
您可以将定义拆分到任意数量的文件中,但习惯上将单个命名空间放在单个文件中,反之亦然。
请参阅http://clojure.org/libs 了解如何命名和加载文件和命名空间。需要记住的一件事是,命名空间中的破折号会转换为文件名中的下划线。
【讨论】:
Leiningen 的 project.clj 是定义一个 project 变量,它只不过是一个带有表示项目参数的键的映射(在 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。
【讨论】: