Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can operators in Smalltalk be overloaded?

Is it possible to overload operators in Smalltalk?

I am looking for tutorials/examples.

Thanks.

like image 920
Zakaria Avatar asked Jun 30 '11 05:06

Zakaria


2 Answers

Method overloading is not possible in Smalltalk. Instead, a combination of method overriding and a technique called double dispatch is used to implement the same behavior as operator overloading in other languages.

You can find an example implementation in the mathematical operators +,*,/,- (which are binary messages in Smalltalk). Here is the idea: the implementation of Integer>>+ sends a message #addWithInteger: to its argument. The implementation of #addWithInteger: is implemented on each Magnitude subclass, such as to specialize addition of Int+Int, Float+Int, etc...

like image 186
Johan B Avatar answered Sep 18 '22 23:09

Johan B


For most part, things that are operators in other languages are in Smalltalk unary or binary messages like +, *, /, ... etc. Classes are free to respond to those messages as they seem fit, so yes, you can redefine behavior of +, and you can also make instances of some non number classes understand and respond to it.

For instance look at the implementation of + in Point class.

One thing to note, := and ^ are not messages, so they can not redefined in a way described above.

Btw, for learning Smalltalk, one of the greatest resources of examples and code is the Smalltalk image. So I recommend that you fire up Smalltalk, and learn your way to browse through vast amount of examples that it contains.

like image 32
Davorin Ruševljan Avatar answered Sep 20 '22 23:09

Davorin Ruševljan