当我使用一些长函数名称时,我使用了这个use
表单,如下所示:
(use '[clojure.string :as str])
但我不知道为什么在向量中添加单引号 '
,所以我试图弄清楚它的类型:
(type '[clojure.string :as str]) ;=> clojure.lang.PersistentVector
简化示例:
(type ["hello"]) ;=> clojure.lang.PersistentVector (type '["hello"]) ;=> clojure.lang.PersistentVector
似乎单引号没有改变任何东西,任何人都可以解释它在use
表单中的用法吗?
目的是引用符号.这样它们将被视为符号,并且use
可以将这些符号作为命名空间来加载和拉入当前符号.您希望避免对符号进行默认处理,该符号将其解析为Var的名称并使用该Var的值.你也可以这样做
(use ['clojure.string :as 'str])
但这涉及一些不必要的打字; 引用整个向量会让你不太可能忘记任何事情.特别是如果你正在做的任何事情:only
,:refer
或者类似的关键字参数.
旁白:ns
不需要这个,因为作为一个宏,它可以控制对其参数的评估 - 函数类似于require
并且use
在它们自己运行之前读取和评估它们的所有参数.这是为什么ns
通常优先于这些功能的部分原因.