7

当 lein 建立一个项目时,会创建一个 core.clj 文件以及其他目录和文件。我想知道是否可以将 core.clj 的内容拆分到另一个源文件

../myproj/src/myproj/

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

4

3 回答 3

7

IIRC(我没有方便检查的项目),您src/myproj/目录中的所有内容都在'myproj命名空间中。所以你的core.clj文件将在命名空间中'myproj.core。其他文件将位于命名空间内的它们自己的命名'myproj空间中(例如'myproj.other-filefor other_file.clj),并且可以通过以下方式拉入core.clj

(use 'myproj.other-file)

或者,在ns声明中:

(ns myproj.core
  (:use [myproj.other-file]))
于 2012-11-07T14:40:50.933 回答
4

您可以将定义拆分到任意数量的文件中,尽管将单个命名空间放在单个文件中是惯用的,反之亦然。

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

于 2012-11-07T14:40:06.973 回答
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 中不再需要它,因为它提供了配置文件功能。如果您对过去的情况感到好奇,请阅读针对 Clojure 的多个版本测试您的项目。

于 2012-11-08T16:48:49.340 回答