下面的代码会失败(在 1.6 和最新 1.7-alpha4 中都是一样)
`
用户=> (ns foo)
nil
foo=> (def inc inc)
警告:inc 已经在命名空间 foo 中引用:#'clojure.core/inc,正在被替换为:#'foo/inc
'foo/inc
;; 注意此时 inc 是未绑定的,这导致下面异常
foo=> inc
foo=> (ns bar)
nil
bar=> (require ['foo :refer ['inc]])
警告:inc 已经在命名空间 bar 中引用:#'clojure.core/inc,正在被替换为:#'foo/inc
nil
bar=> (inc 8)
IllegalStateException 尝试调用未绑定函数:#'foo/inc clojure.lang.Var$Unbound.throwArity (Var.java:43)
`
进一步的调查表明 foo/inc 是未绑定的
foo/inc
=> #
进一步的调查还表明,用几乎任何其他东西(例如:def inc dec),(def inc clojure.core/inc),或(def inc (fn (link: n) (+ n 1))) 替换(def inc inc),都不会导致异常(但警告仍然存在)。
我预计
a) foo/inc 应该被绑定,并且与 clojure.core/inc 具有相同的值
b) 在要求 foo/inc 时没有错误
c) bar/inc 应该被绑定到 foo/inc