为什么我们不需要动态语言中的接口?

Sri*_*thy 17 c# python java dynamic-languages

是不是因为动态类型我们不需要python中的接口概念(比如Java和C#)?

Osc*_*Ryz 23

interface 作为关键字和神器是在Java引入1(和C#把它从那里)来描述一个对象必须坚持的合同了.

但是,接口一直是面向对象范式的关键部分,基本上它代表了一个对象必须响应的方法.Java只是强制执行此机制来提供静态类型检查.

因此,动态(OO)编程语言确实使用接口,甚至认为它们不会静态检查它们.就像其他数据类型一样,例如在Ruby中:

 @i = 1;
Run Code Online (Sandbox Code Playgroud)

您不必声明i类型FixNum,只需使用它即可.接口也是如此,它们只是流动.权衡是,您不能对此进行静态检查,故障仅在运行时显示.

另一方面,结构类型(或称为静态鸭类型,我称之为:P)被Go或Scala等语言使用,可以提供两全其美的效果.

1.请参阅Daniel Earwicker关于CORBA interface关键字的评论

  • "作为关键字和工件的接口是由Java引入的".不太确定.CORBA的IDL(1991)具有`interface`关键字,而在C++版本2.0(1989)中,具有所有纯虚拟成员函数的类在语义上与接口相同.所以我猜想也许Java从CORBA中借用了关键字,以便特别突出从C++借来的语言特性. (3认同)
  • 如果可以的话,我会额外添加+1以提及结构类型.这是一个很棒的概念. (2认同)

gom*_*mad 5

我们不要求它们,但我们支持它们.查看Zope接口(可以在Zope之外使用).