解释在 project.clj 文件中的 Clojure 依赖项斜线语法?

3
在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个回答

2
在Clojure代码中,斜杠用于将命名空间与命名空间中的函数名称分开。在project.clj文件中,斜杠是项目名称(按照惯例为组织/产品)的一部分,由maven使用。
斜杠是符号的有效元素。例如,在repl中尝试'this/is/not/a/namespace',它返回一个具有许多斜杠的符号。整个(defproject ...)表单位于隐式语法引用(`)中,这意味着您可以拥有任意名称,并将其视为符号(还可以使用~取消引用并将任意代码插入到project.clj中,但这通常是一种代码味道)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接