通过使用 javascript 以及我的 python 经验拓宽我的视野,我提出了一些想法。
如果一个实体对外部客户的看法是通过它的接口,那么类型的目的是什么?
在静态类型语言中,类型具有非常重要的核心重要性。类型和接口是严格关联的。例如,在 java 中,当您声明一个接口 FooIface 并且一个对象实现该接口时,您不能在需要 BarIface 的上下文中使用它,即使两者在方法、签名和异常方面完全相同。
在python中不是这样。即使两个对象具有完全不同且不相关的类型,只要它们的接口相同,它们就可以完全透明地互换。如果它叫起来像鸭子一样走路,那就是鸭子。我可以通过在运行时完全改变对象的接口来完全改变对象的性质,但它会保留原始类型。
这种观点在 javascript 中发挥到了极致,任何原型链中的每个对象都只是一个对象。你在 javascript 中询问每个对象的类型,它会告诉你,它是一个对象。
在我看来,这些语言的类型概念是徒劳的。那么真正重要的是什么?类型在动态类型语言中有真正的意义吗?