|
|
|
|
|
by joe_the_user
5811 days ago
|
|
I couldn't help imagining how OO "objects" might be implemented in Clay Your dispatch code now: record Square {
side : Double;
}
record Circle {
radius : Double;
}
variant Shape = Square | Circle;
procedure show;
overload show(x:Square) { println("Square(", x.side, ")"); }
overload show(x:Circle) { println("Circle(", x.radius, ")"); }
My "Objectivizing": interface Shape {
abstract procedure show(self);
}
record Square : Shape {
side : Double;
show(self) { println("Square(", self.side, ")"); }
}
record Circle: Shape {
radius : Double;
show(self) { println("Circle(", self.radius, ")"); }
}
variant Shape = Square | Circle;
Here, "abstract" declaration in the parent would make the children's "show" automatically become an overload.
'self' is variable which would be automatically specialized to the containing record. I think the resulting code isn't excessively verbose. |
|