为什么在"使用"(在clojure中)使用围绕向量的单引号?

Nic*_*ick 6 clojure

当我使用一些长函数名称时,我使用了这个use表单,如下所示:

(use '[clojure.string :as str])
Run Code Online (Sandbox Code Playgroud)

但我不知道为什么在向量中添加单引号 ',所以我试图弄清楚它的类型:

(type '[clojure.string :as str])
;=> clojure.lang.PersistentVector
Run Code Online (Sandbox Code Playgroud)

简化示例:

(type ["hello"])
;=> clojure.lang.PersistentVector

(type '["hello"])
;=> clojure.lang.PersistentVector
Run Code Online (Sandbox Code Playgroud)

似乎单引号没有改变任何东西,任何人都可以解释它在use表单中的用法吗?

Mag*_*gos 10

目的是引用符号.这样它们将被视为符号,并且use可以将这些符号作为命名空间来加载和拉入当前符号.您希望避免对符号进行默认处理,该符号将其解析为Var的名称并使用该Var的值.你也可以这样做

(use ['clojure.string :as 'str])
Run Code Online (Sandbox Code Playgroud)

但这涉及一些不必要的打字; 引用整个向量会让你不太可能忘记任何事情.特别是如果你正在做的任何事情:only,:refer或者类似的关键字参数.

旁白:ns不需要这个,因为作为一个宏,它可以控制对其参数的评估 - 函数类似于require并且use在它们自己运行之前读取和评估它们的所有参数.这是为什么ns通常优先于这些功能的部分原因.