根據規範,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