>A problem with Ruby is that it does not provide deep cloning. What’s more, some classes produce errors when you issue a clone on them, such as Fixnum.
Here is how you can write a simple deep cloning method that will work for hashes and arrays:
def clone_helper(el)
el_clone = nil
if el.kind_of?(Array)
el_clone = array_clone_helper(el)
elsif el.kind_of?(Hash)
el_clone = hash_clone_helper(el)
else
begin
el_clone = el.clone
rescue TypeError
el_clone = el
end
end
return el_clone
end
def array_clone_helper(arr)
arr.map { |el| clone_helper(el) }
end
def hash_clone_helper(h)
h.inject({}) { |h_clone, kv| h[kv[0]] = clone_helper(kv[1]) }
end
Happy coding..