在project.clj中解释clojure依赖项斜杠语法?

时间:2013-08-22 15:44:50

标签: clojure

在Clojure命名空间中,我使用斜杠将命名空间或命名空间别名与该命名空间中的符号分开,如

(ns whatever (:require [clojure.math.combinatorics]))
(clojure.math.combinatorics/subsets [42 43 44])

但是,我刚刚意识到,在查看project.clj时,斜杠似乎意味着依赖项部分中的某些内容完全不同,如

(defproject whatever "1.0.0"
  :description (str "yeah sure yubetcha")
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure            "1.4.0"]
                 [org.clojure/math.combinatorics "0.0.3"]])

我通常不会遇到依赖项问题:我只是盲目地将它们从文档中删除,然后Leiningenclojars.org或者类似地进行了神奇的下载。但是我刚刚意识到我不理解这里的斜杠语法,并且会感谢澄清,特别是如果用法与使用带有命名空间的斜杠完全正交或者是否有更微妙的事情发生。

1 个答案:

答案 0 :(得分:2)

clojure代码中的斜杠用于将命名空间与命名空间中的函数名称分开。 project.clj中的斜杠是maven使用的项目名称(按惯例组织/产品)的一部分。

A /是符号的有效元素 - 例如在repl中尝试'this/is/not/a/namespace - 它返回一个带有一堆组成斜杠的符号。整个(defproject ...)表单位于隐式语法 - 引号(`)中,这意味着您可以使用任意名称并将它们视为符号(也可以使用〜取消引用并将任意代码插入到project.clj中,但是这样通常是代码味道。

相关问题