Clojure 允许deftype
不完全实现接口的 s,例如
(deftype Foo [x] clojure.lang.ISeq (next [this] x))
(Foo
不实施seq
)。来自 Pythonic 的鸭子类型,或者充其量(或最坏的情况,取决于你的 POV),ABC,我很难理解为什么允许这种不完整的实现,因为我认为接口的目的是保证存在一组方法(现在看来,为了deftype
安全地使用其他人的 s,我必须将每个“方法”调用包装在 a 中try...catch
)。