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 で実行しています。