Other
是 . 的更复杂版本(包装)What
。它做了什么What
,但更多。我小心地定义了 2 个命名空间。
(ns what)
(defprotocol IWhatever
(whatever [this]))
(deftype What []
IWhatever
(whatever [this]
(str "whatever")))
(whatever (->What))
(ns other (:require what))
(deftype Other []
what/IWhatever
(whatever [this]
(what/whatever (what/->What))))
(whatever (->Other)) ;bad line
错误是:
clojure.lang.Compiler$CompilerException: java.lang.RuntimeException: Unable to resolve symbol: whatever in this context, compiling:(C:\...)
为什么最后一个表达式不能解决?就像找不到名称一样,但是正如您所见,我在当前命名空间下重新定义了它。
这是无意义的代码,但我使用了最简单的问题示例来说明这一点。如果相关的话,我会在 LightTable 中运行它。