解释project.clj中的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或类似的地方下载。但我刚刚意识到我不理解这里的斜杠语法,如果能澄清一下,特别是如果斜杠的用法与命名空间中的斜杠的用法完全正交,或者是否有更微妙的事情发生。

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

/是符号的有效元素-例如,在repl中尝试'this/is/not/a/namespace-它返回一个包含一组组成斜杠的符号。整个(defproject ...)形式都在一个隐式语法引号(`)中,这意味着你可以有任意的名称,它们被视为符号(你也可以使用~来取消引号并将任意代码插入project.clj,但这通常是一种代码气味)。

最新更新