为什么奇怪';ns的用法/与Clojure一起使用?

为什么奇怪';ns的用法/与Clojure一起使用?,clojure,Clojure,我在clojure库中定义名称空间,不带“ (ns myproject.hello) 但是,我用'来使用它 (use 'myproject.hello) 为什么会这样?这背后有什么逻辑吗?在gosh(scheme的方言)中,我使用了without'e,即(使用myproject)为什么会出现这种不规则?简短回答:ns是一个宏,因此它的参数不会被计算use是一个函数,因此必须引用它的参数,以防止编译器对其求值 use/require函数不是Clojure最初设计的一部分,它们是由贡献者添加的

我在clojure库中定义名称空间,不带“

(ns myproject.hello) 
但是,我用'来使用它

(use 'myproject.hello)

为什么会这样?这背后有什么逻辑吗?在gosh(scheme的方言)中,我使用了without'e,即(使用myproject)为什么会出现这种不规则?

简短回答:
ns
是一个宏,因此它的参数不会被计算
use
是一个函数,因此必须引用它的参数,以防止编译器对其求值

use/require函数不是Clojure最初设计的一部分,它们是由贡献者添加的。他们需要大修。

惯用的方法是:

(ns myproject.hello)


(:use myproject.world))

你能解释一下为什么这是惯用用法,以及
use
和将
:use
放入
ns
之间的区别吗?它们的效果几乎相同。然而,对于代码读者和自动化工具来说,查看ns声明更容易确定要包含哪些内容,因此将其作为惯用方法是有意义的。