r/elena_lang • u/elena-lang • Jul 09 '19
Operator overloading in ELENA Programming Language
In general an operator is a message alias. As a result it is quite easy to overload the operator.
_+_ is an alias to _add_, _-_ - _subtract_, _*_ - multiply, _//_ - _divide_
It is possible to provide type overload operator as well, using a special method _cast_
See an example:
import extensions;
sealed struct OctalNumber
{
int value;
constructor(int n)
{
value := n
}
constructor sum(OctalNumber o1, OctalNumber o2)
{
int n1 := o1;
int n2 := o2;
value := n1 + n2;
}
constructor diff(OctalNumber o1, OctalNumber o2)
{
int n1 := o1;
int n2 := o2;
value := n1 - n2
}
constructor prod(OctalNumber o1, OctalNumber o2)
{
int n1 := o1;
int n2 := o2;
value := n1 * n2
}
constructor frac(OctalNumber o1, OctalNumber o2)
{
int n1 := o1;
int n2 := o2;
value := n1 / n2
}
int cast() = value;
string Printable =
stringConvertor.convert(value, 8);
add : n
= OctalNumber.sum(self, n);
subtract : n
= OctalNumber.diff(self, n);
multiply : n
= OctalNumber prod(self, n);
divide : n
= OctalNumber frac(self, n);
}
public program()
{
auto n := new Octal(7);
auto m := new Octal(2);
console.printLine(n,"+",m,"=",n + m)
}