#!/usr/bin/ruby

#
## https://rosettacode.org/wiki/Polymorphic_copy
#

class T(value) {
    method display {
        say value;
    }
}
 
class S(value) < T {
    method display {
        say value;
    }
}
 
var obj1 = T("T");
var obj2 = S("S");
var obj3 = obj2.clone;          # make a clone of obj2
                                # use .dclone() for deep cloning
 
obj1.value = "foo";             # change the value of obj1
obj2.value = "bar";             # change the value of obj2
 
obj1.display;                   # prints "foo"
obj2.display;                   # prints "bar"
obj3.display;                   # prints "S"