2

我试图理解为什么 Smalltalk 有时被称为“动态类型”而不是“无类型”,我也读了很多书,这似乎很有意义。

Smalltalk 中没有变量、参数和方法返回的类型注释 - 那么您会将对象的类型(如果您说对象的类型是它的类)与什么进行比较?

还有动态类型和动态类型检查不一样吗?因此,如果 Smalltalk 是动态类型的,这意味着 Smalltalk 内部确实会在运行时为变量、参数、方法返回提供类型?可以?

4

4 回答 4

4

“动态类型”在某些编程语言社区中广泛用于表示“动态检查”。同样,在更多以理论为导向的圈子中,它被广泛认为在技术上具有误导性,因为所检查的不是任何形式意义上的类型。然而,这种用法现在太普遍了,没有机会纠正它。

另请参阅我对反问题的回答以了解更多背景信息。

于 2012-07-17T10:48:13.827 回答
4

一种惯例是从两个维度比较编程语言:

  • 从动态类型到静态类型的连续体
  • 从强类型到弱类型的连续体

动态类型通常意味着在编译时不检查类型,而它们用于静态类型。

强类型通常意味着运行时的类型是永远不会改变的独特类型,而弱类型意味着可以根据上下文更改底层类型。

据说 Smalltalk 有 Strong Dynamic Typing。

于 2012-07-17T14:34:10.590 回答
3

有关静态/动态类型和隐式/显式类型的全面讨论,您可能需要查看:http: //blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type -systems.html

于 2012-07-17T15:46:15.247 回答
2

在 Smalltalk 中,每个对象都有它的类型 - 类,它定义了可以通过其实例(以及如何)进行的操作。因此,当您向某个对象发送消息时,它的类会检查该消息是否可以被处理以及如何处理。

另一方面,与静态类型语言相比,变量可以在程序的整个生命周期中包含不同类型的不同对象,因此没有基于变量(或参数)的类型检查。

正如 Damien 建议的一篇优秀文章所指出的那样 - 类型的概念在静态类型语言和动态类型语言中是完全不同的。如果尝试直接比较,这种差异可能会导致很多混乱。

于 2012-07-17T16:21:06.867 回答