I was just looking at the Cloneable module from the Facets' library,
because it's useful, and noticed a couple of possible bugs. Is my
assessment of this correct?
module Cloneable
def clone
sibling = self.class.new
instance_variables.each do |ivar|
value = self.instance_variable_get(ivar)
sibling.instance_variable_set(ivar, value.dup) #rake_dup)
end
sibling
end
alias_method :dup, :clone
end
Question 1: Shouldn't #clone use self.class.allocate instead of
self.class.new? Better yet, shouldn't the superclass's dup be called
somehow?
Question 2: Shouldn't #clone and #dup be implemented differently, so that
#clone can freeze the newly created object?
--Ken
--
Ken (Chanoch) Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology.
http://www.iit.edu/~kbloom1/