$: << '..' require 'sloop' EllipseTraits = sloop { # Archimedes def_area { Math::PI * a * b } # Ramanujan def_circumfence { Math::PI * (3*(a+b) - Math.sqrt((3*a+b)*(a+3*b))) } def_inspect { "#(an ellipse with radii #{a} and #{b})" } } CircleTraits = sloop { # Archimedes def_circumfence { Math::PI * 2 * r } def_inspect { "#(a circle radius #{r})" } } Ellipse = sloop { inherit EllipseTraits self.a = 0 self.b = 0 } Circle = sloop { inherit Ellipse inherit CircleTraits self.r = 0 def_a { r } def_b { r } } if $0 == __FILE__ e = Ellipse.clone e.a = 1 e.b = 5 p [e, e.circumfence, e.area] c = Circle.clone c.r = 4 p [c, c.circumfence, c.area] end