【发布时间】:2014-12-22 16:45:37
【问题描述】:
根据规范,def 应该在当前 ns 中实习 var(即 *ns*)。但是,下面的代码看起来一点也不像:
(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 在正确的命名空间中执行其操作。
标签: clojure namespaces function defn