Smalltalk中的“无界动态多态”是什么?有人可以提供一个例子吗?
在此book: C ++模板中提及:完整指南,p。 238。
答案 0 :(得分:6)
See 在c ++中: 通过继承实现的多态性是有界的和动态的:
通过模板实现的多态性是无限的和静态的:
在Smalltalk中,对象可以决定是否以及如何对在运行时发送的消息做出反应。
答案 1 :(得分:1)
在C ++中,您在对象上调用的方法是在编译时决定的。对于非虚拟方法,这是一个简单的方法,对于虚拟调用,它是通过vtable查找完成的。但是,虚拟调用(它们是多态性的地方)的关键在于编译器已经确定调用该方法是有效的,并且它知道要使用的vtable中的哪个条目。在
在Smalltalk中,调用在运行时解决。被调用的对象的类型可以在调用之间变化,因此正确的方法(可能已被覆盖)不能在编译时绑定(未绑定的位),并且必须在运行时解析(动态位)。
答案 2 :(得分:1)
unbounded dynamic polymorphism
不是特定于语言的功能。所以我假设你的问题
Smalltalk中的“无界动态多态”是什么?
可以简化为
什么是“无界动态多态”?
您在提到的文档中对此进行了解释。 我想你是在问为什么使smalltalk成为一种无限的动态多态语言? 首先,我不赞成绑定与未绑定这一术语。这个定义对我来说并不清楚。
例如假设我有一个模板类A,如果你选择将它实例化为A<int>
它被绑定,那么这里没有不确定的东西。即使对于A类,接口也是预先确定的。我要说的是模板是一种在Haskell类型系统中具有多态类型的方式。
我认为使用术语未绑定/绑定的结果是什么是多态性的定义不佳。多态性可以应用于类型或接口。
多态接口是一种可以实现选择不同行为的接口。例如,对象a
,b
,c
都可以以不同的方式响应Copy
界面。
多态类型是具有参数的类型。
正如你所看到的,多态接口和多态类型是两件不相关的东西。
另外,为了对C ++和smalltalk进行分类,我会说C ++是一种具有多态类型的静态类型语言。而smalltalk是一种动态类型的语言。并且它不需要多态类型系统,因为多态类型只在静态类型语言中是明智的。