RosettaCodeData/Task/Polymorphism/Zkl/polymorphism.zkl

28 lines
832 B
Plaintext

class Point{var x,y;
fcn init(xyOrPoint=0,_=0){
if(Point.isInstanceOf(xyOrPoint)) set(xyOrPoint);
else x,y=vm.arglist.apply("toFloat")}
fcn set(p){x=p.x;y=p.y}
fcn toString{"(%d,%d)".fmt(x,y)}
}
class Circle{var center, radius;
fcn init(a=0.0,b=0.0,r=1.0){
switch [arglist]{
case(Circle){ center=Point(a.center); radius=a.radius }
case(Point) { center=Point(a); radius=b.toFloat(); }
else { center=Point(a,b); radius=r.toFloat(); }
}
}
fcn copy{self(self)}
fcn toString{"(%s,%d)".fmt(center.toString(),radius)}
}
// see if various constructors work
Point(); Point(1); Point(1,2), Point(Point());
Circle(); Circle(1); Circle(1,2); Circle(1,2,3);
Circle(Point()); Circle(Point(),1);
Circle(Circle());
c:=Circle(1,2,3);
c.println(); c.center.println();
c.copy().println();