Smalltalk的运营商可以超载吗?

Zak*_*ria 6 smalltalk operator-overloading

Smalltalk中的运算符是否可能超载?

我正在寻找教程/示例.

谢谢.

Joh*_*n B 16

Smalltalk中无法进行方法重载.相反,方法重写和称为双调度的技术的组合用于实现与其他语言中的运算符重载相同的行为.

您可以在数学运算符+,*,/,-(Smalltalk中的二进制消息)中找到示例实现.这是一个想法:实现向其参数Integer>>+发送消息#addWithInteger:.实现#addWithInteger:是在每个Magnitude子类上实现的,例如专门添加Int + Int,Float + Int等...

  • 不,我的意思是"方法重载",因为Smalltalk没有任何运算符(只有方法).重载方法(即定义具有相同选择器但具有不同输入/输出'类型'的方法)是不可能的.请注意"特殊多态性"是可能的(即在不同的类上定义具有相同选择器的方法). (3认同)

Dav*_*jan 12

在大多数情况下,作为其他语言中的运算符的东西是Smalltalk一元或二进制消息,如+,*,/,...等等.类似可以自由地响应这些消息,因为它们看似合适,所以是的,你可以重新定义行为of +,您还可以使一些非数字类的实例理解并响应它.

例如,查看Point类中+的实现.

需要注意的一点是:=和^不是消息,因此不能以上述方式重新定义.

顺便说一句,对于学习Smalltalk,示例和代码的最大资源之一是Smalltalk图像.因此,我建议您启动Smalltalk,并学习浏览其中包含的大量示例的方法.


Igo*_*nko 6

除了赋值之外,没有smalltalk中的运算符.一切都在类中作为方法实现.因此,如果您想要改变=或+/ - 方法的行为,只需看看它们的实现者.或者,如果您想让您的类的实例理解这些消息,请实现它们.