代码之家  ›  专栏  ›  技术社区  ›  Alex Miller

Clojure中使用名称空间的常见约定是什么?

  •  50
  • Alex Miller  · 技术社区  · 16 年前

    我很难找到在Clojure中使用名称空间的好建议和常见做法。我意识到名称空间与Java包不同,所以我试图梳理Clojure中的约定,这似乎很难确定。

    1. 我对Clojure命名空间使用的唯一性约定是否与通常对Java包使用的惟一性约定相同[[公司域.项目.子系统]
    2. 如果我有多个名称空间,我是否需要将所有代码编译成一个jar并将其添加到类路径中以使其可访问?
    3. 每个名称空间应该编译成一个jar吗?或者我应该创建一个包含来自许多名称空间的clj代码的jar吗?

    谢谢

    2 回复  |  直到 16 年前
        1
  •  41
  •   Michał Marczyk    16 年前
    1. 如果您认为使用顶级组件(cf-Jure)并不是很好,那么它可以帮助您实现顶级组件。。。Clojure本身使用Clojure.*(对于contrib库使用Clojure.contrib.*),但我认为这是一种特殊情况。

    2. 对你绝对 这样做,否则Clojure将无法找到您的名称空间。还要注意的是,在名称空间名称中不能使用下划线或在文件名中使用连字符,在名称空间名称中使用连字符的地方,必须在文件名中使用下划线(以便 my.cool-project 在名为 cool_project.clj my ).

    3. 然而,

      有时您仍然需要使用AOT编译,特别是在一些Java互操作场景中——相关函数/宏的文档总是提到这一点。clojure.contrib中有需要AOT的示例;我从不需要它,所以我不能提供太多的细节。

    4. 另一方面,一个包含所有项目代码及其依赖项的jar有时可能对部署有用。退房 the Leiningen build tool

        2
  •  10
  •   cemerick    16 年前
    1. 严格地说,这是不必要的,尽管许多Java项目也放弃了这种约定,特别是对于内部项目或私有API。但是要避免使用单段名称空间,这会导致在默认包中生成类文件。

    推荐文章