(use '[clojure.string :as str])
的效果似乎是将所有内容从clojure.string加载到当前命名空间而没有命名空间限定。 (use '[clojure.string :as str :only (join)])
的效果似乎只是加载到当前名称空间中,使得{1}}前缀可以访问clojure.string名称空间的其余部分。有没有办法简单地使用str/
前缀访问整个clojure.string命名空间,而不选择任何我想直接导入当前命名空间的名称?
答案 0 :(得分:2)
require
是引用其他命名空间的首选方法。您可以使用:as
为您需要的命名空间提供前缀。您可以使用:refer
将特定符号引用到命名空间中,而无需限定。如果要将所有符号导入命名空间,可以使用:all
代替符号名称,但应限制其使用。
use
不再使用太多而且被避免了,因为它使得更难理解不合格符号的来源。我甚至没有意识到use
可以提供:as
,它没有在文档字符串中列出。
答案 1 :(得分:0)
请注意,Clojure源代码文件与REPL中使用的格式不同,如果混淆了它们可能会造成混淆。在源代码文件中,使用ns
宏:
(ns example.core
(:require [clojure.string :as str]
[datomic.api :as d] ))
所以我们使用:require
关键字(带冒号),并且命名空间规范向量是不加引号的。与您在repl上输入的内容相比:
(require '[clojure.string :as str])
我们调用require
函数(没有冒号),因此必须引用名称空间规范向量。