我试图理解为什么 Smalltalk 有时被称为“动态类型”而不是“无类型”,我也读了很多书,这似乎很有意义。
Smalltalk 中没有变量、参数和方法返回的类型注释 - 那么您会将对象的类型(如果您说对象的类型是它的类)与什么进行比较?
还有动态类型和动态类型检查不一样吗?因此,如果 Smalltalk 是动态类型的,这意味着 Smalltalk 内部确实会在运行时为变量、参数、方法返回提供类型?可以?
“动态类型”在某些编程语言社区中广泛用于表示“动态检查”。同样,在更多以理论为导向的圈子中,它被广泛认为在技术上具有误导性,因为所检查的不是任何形式意义上的类型。然而,这种用法现在太普遍了,没有机会纠正它。
另请参阅我对反问题的回答以了解更多背景信息。
一种惯例是从两个维度比较编程语言:
动态类型通常意味着在编译时不检查类型,而它们用于静态类型。
强类型通常意味着运行时的类型是永远不会改变的独特类型,而弱类型意味着可以根据上下文更改底层类型。
据说 Smalltalk 有 Strong Dynamic Typing。
有关静态/动态类型和隐式/显式类型的全面讨论,您可能需要查看:http: //blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type -systems.html
在 Smalltalk 中,每个对象都有它的类型 - 类,它定义了可以通过其实例(以及如何)进行的操作。因此,当您向某个对象发送消息时,它的类会检查该消息是否可以被处理以及如何处理。
另一方面,与静态类型语言相比,变量可以在程序的整个生命周期中包含不同类型的不同对象,因此没有基于变量(或参数)的类型检查。
正如 Damien 建议的一篇优秀文章所指出的那样 - 类型的概念在静态类型语言和动态类型语言中是完全不同的。如果尝试直接比较,这种差异可能会导致很多混乱。