2010-08-19 29 views
7

我定义命名空间Clojure的LIB里面没有 '为什么ns /用于Clojure的奇怪'用法?

(ns myproject.hello) 

但是,我用' 使用它。

(use 'myproject.hello) 

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

回答

15

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

使用/ require函数不是Clojure最初设计的一部分,它们被贡献者添加。他们需要彻底改革。

3

的惯用方法是:

(NS myproject.hello

(:使用myproject.world))

+0

你能解释为什么这是惯用的,不同的是什么use'之间'在'ns'里放入':use'? – 2011-10-18 12:58:18

+0

他们有几乎相同的效果。然而,代码和自动化工具的读者更容易查看ns声明来确定包含的内容,因此这是惯用方法。 – mikera 2012-02-23 02:29:04

相关问题