当我使用一些长函数名称时,我使用了这个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通常优先于这些功能的部分原因.