Consider a simple class like this:
class MyClass
def initialize
@var1 = ''
@arr1 = []
end
end
Now if I have an instance of MyClass, and want to clone it, what is the 'cleanest' way to do this?
a = MyClass.new
b = a.clone
This method leaves 'b.arr1' pointing to the same data as a.arr1.
Hmmm... I'll try overriding clone, and manually deal with the arrays:
def clone
rslt = super.clone
end
This blows the stack, I believe because all methods are inherited virtually.
Ok, so now I have to manually copy everything in clone, whatever, I am getting sick of this:
def clone
rslt = MyClass.new
rslt.var1 = @var1
rslt.arr1 = @arr1.clone
rslt
end
Turns out this does not compute either, as there is no method var1= or arr1= ! I want to keep var1 private, so can't go this route either.
One more attempt:
def clone
rslt = MyClass.new
self.instance_variables.each do |member|
rslt.instance_variable_set( member, self.instance_variable_get(member).clone )
end
end
This fails as the methos do not seem to copy over.
There has to be a simple way to do something like this? What is common recipe for something like this? Should this really be that hard in ruby?
~S