为什么在“矢量”中使用单引号;使用「;(在clojure)?

为什么在“矢量”中使用单引号;使用「;(在clojure)?,clojure,Clojure,当我使用一些长函数名时,我使用了use表单,如下所示: (use '[clojure.string :as str]) 但我不知道为什么要在向量中添加一个引号”,所以我试图找出它的类型: (type '[clojure.string :as str]) ;=> clojure.lang.PersistentVector 简化示例: (type ["hello"]) ;=> clojure.lang.PersistentVector (type '["hello"]) ;=>

当我使用一些长函数名时,我使用了
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
可以将这些符号作为命名名称空间来加载并拉入当前名称空间。您希望避免对符号的默认处理,即将其解析为变量的名称并使用该变量的值。您也可以这样做

(use ['clojure.string :as 'str])
但这需要一些不必要的打字;引用整个向量可以减少你忘记任何事情的可能性。特别是如果您正在使用
:仅
:refere
或类似的关键字参数执行任何操作


旁白:
ns
不需要这样做,因为作为一个宏,它可以控制参数的计算-像
require
use
这样的函数在运行之前读取并计算所有参数。这就是为什么
ns
通常优于这些函数的部分原因。

use
是一个函数,因此求值器在传递参数之前对其求值(应用顺序求值)

您不希望对
[clojure.string:as str]
进行求值,因为求值器在应用
use
之前会尝试解析其中的符号,但没有成功

因此,
quote
(读者速记
)可以阻止他们的评估