3

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

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

但是,我刚刚意识到,看着 a 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"]])

我通常不会遇到依赖关系问题:我只是漫不经心地从文档中抓取它们,然后它们会被Leiningenfromclojars.org或类似的东西神奇地下载。但我刚刚意识到我不理解这里的斜杠语法,并希望得到澄清,特别是如果使用与使用命名空间的斜杠完全正交,或者是否有更微妙的事情发生。

4

1 回答 1

2

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

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

于 2013-08-22T15:47:56.583 回答