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