根据规范,def
应该在当前ns中实现var(即* ns *)。但是,下面的代码看起来不像这样:Clojure使用什么命名空间来定义
(ns namespace-b)
(defn def_something []
(ns namespace-a)
(println *ns*) ;prints namespace-a as it should
(def something 1)
)
(def_something)
(println namespace-b/something) ; prints 1
(println namespace-a/something) ; throws
我错过了什么?
注:
defn
是只用于清晰度。定义和运行匿名函数也同样适用。- 我知道使用
def
里面的函数可能不是很习惯。然而,这只是我遇到的一个更大问题的精髓。
不仅是函数里面的'def'不是惯用的,它不会做你期望的(正如你正在学习的那样)。最好直接使用'intern',或者至少使用一个宏,以便def在适当的命名空间中完成它的工作。 – noisesmith 2014-10-27 16:43:41