【问题标题】:Additional Clojure project source files其他 Clojure 项目源文件
【发布时间】:2012-11-07 14:32:16
【问题描述】:

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

下的另一个源文件

../myproj/src/myproj/

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

【问题讨论】:

    标签: clojure leiningen


    【解决方案1】:

    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]))
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢。我放弃了名称空间中的破折号。我和他们有太多麻烦了。
      【解决方案3】:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 2016-08-24
        相关资源
        最近更新 更多