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

pro*_*eek 7 clojure

我在没有'的clojure lib中定义命名空间,

(ns myproject.hello) 
Run Code Online (Sandbox Code Playgroud)

但是,我使用'用于它.

(use 'myproject.hello)
Run Code Online (Sandbox Code Playgroud)

为什么是这样?这背后有什么逻辑吗?在gosh(方案的方言)中,我使用没有'ie(使用myproject)为什么这种不规则?

Stu*_*rra 15

简答:ns是一个宏,所以它的参数不会被评估. use是一个函数,因此必须引用其参数以防止编译器对它们进行评估.

use/require函数不是Clojure原始设计的一部分,它们由贡献者添加.他们需要进行大修.