Zak*_*ria 6 smalltalk operator-overloading
Smalltalk中的运算符是否可能超载?
我正在寻找教程/示例.
谢谢.
Joh*_*n B 16
Smalltalk中无法进行方法重载.相反,方法重写和称为双调度的技术的组合用于实现与其他语言中的运算符重载相同的行为.
您可以在数学运算符+,*,/,-(Smalltalk中的二进制消息)中找到示例实现.这是一个想法:实现向其参数Integer>>+发送消息#addWithInteger:.实现#addWithInteger:是在每个Magnitude子类上实现的,例如专门添加Int + Int,Float + Int等...
Dav*_*jan 12
在大多数情况下,作为其他语言中的运算符的东西是Smalltalk一元或二进制消息,如+,*,/,...等等.类似可以自由地响应这些消息,因为它们看似合适,所以是的,你可以重新定义行为of +,您还可以使一些非数字类的实例理解并响应它.
例如,查看Point类中+的实现.
需要注意的一点是:=和^不是消息,因此不能以上述方式重新定义.
顺便说一句,对于学习Smalltalk,示例和代码的最大资源之一是Smalltalk图像.因此,我建议您启动Smalltalk,并学习浏览其中包含的大量示例的方法.
除了赋值之外,没有smalltalk中的运算符.一切都在类中作为方法实现.因此,如果您想要改变=或+/ - 方法的行为,只需看看它们的实现者.或者,如果您想让您的类的实例理解这些消息,请实现它们.