为什么奇怪';ns的用法/与Clojure一起使用?
我在clojure库中定义名称空间,不带“为什么奇怪';ns的用法/与Clojure一起使用?,clojure,Clojure,我在clojure库中定义名称空间,不带“ (ns myproject.hello) 但是,我用'来使用它 (use 'myproject.hello) 为什么会这样?这背后有什么逻辑吗?在gosh(scheme的方言)中,我使用了without'e,即(使用myproject)为什么会出现这种不规则?简短回答:ns是一个宏,因此它的参数不会被计算use是一个函数,因此必须引用它的参数,以防止编译器对其求值 use/require函数不是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声明更容易确定要包含哪些内容,因此将其作为惯用方法是有意义的。