当我使用一些长函数名时,我使用了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
形式解释它的用法吗?
答案 0 :(得分:10)
目的是引用符号。通过这种方式,它们将被视为符号,use
可以将这些符号作为命名空间来加载和拉入当前符号。您希望避免对符号进行默认处理,该符号将其解析为Var的名称并使用该Var的值。你也可以这样做
(use ['clojure.string :as 'str])
但这涉及一些不必要的打字;引用整个向量会让你不太可能忘记任何事情。特别是如果您使用:only
,:refer
或类似的关键字参数执行任何操作。
除此之外:ns
并不需要这个,因为作为一个宏,它可以控制对其参数的评估 - 像require
和use
这样的函数在之前读取和评估它们的所有参数他们自己跑。这是ns
通常比这些函数更受欢迎的部分原因。
答案 1 :(得分:3)
use
是一个函数,因此评估者在传递参数之前对其参数进行评估(应用程序订单评估)。
您不希望评估[clojure.string :as str]
,因为评估者会在应用use
之前尝试解析其中的符号而不会成功。
因此,quote
(读者速记'
)可以阻止他们的评估。