为什么在“矢量”中使用单引号;使用「;(在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
(读者速记”
)可以阻止他们的评估