interface - clojure 中接口(interface)的不完整实现

标签 interface clojure deftype

Clojure 允许 deftype不完整地实现接口(interface),例如

(deftype Foo [x] clojure.lang.ISeq (next [this] x))

( Foo 未实现 seq )。来自鸭子类型的 Pythonic 领域,或者充其量(或最坏,取决于你的 POV)ABC,我很难理解为什么允许这种不完整的实现,因为我认为接口(interface)的要点是保证存在一组方法(现在看来,为了安全地使用其他人的 deftype ,我必须将每个“方法”调用包装在 try...catch 中)。

最佳答案

这是 Clojure 动态语言哲学和 Java 静态语言哲学之间的交叉点之一。我同意,这确实表明了两者之间的混淆点。其基本原理是允许 clojure 程序使用 Java 库而不会造成任何不必要的痛苦,并且许多库要求您通过获取传递实现方法的某个类的实例围绕 Java 缺乏一流的功能。从这个角度来看,这种权衡是有道理的,尽管从其他角度来看,它不太符合 Java 哲学。

关于interface - clojure 中接口(interface)的不完整实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10707534/

相关文章:

clojure - 包含conj的接口(interface)?

testing - 你如何在 clojure 中使用它自己的命名空间之外的类型?

Java 接口(interface)扩展 Comparable

clojure - 如何使用 Clojure 的 Apache Commons Codec 库?

clojure - Clojure 的标准?

java - Java 的 toString() 对 Clojure 函数的等价物

java - 非泛型类可以实现泛型接口(interface)吗?

c# - 如何在 C# 中组织类文件

c# - 应用程序设置界面