This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
Making a Copy of an Object | ||
---|---|---|
Code | Expected | Actual |
s1 = 'foo' |
"foo" | "foo" |
s2 = s1.clone |
"foo" | "foo" |
s1[0] = 'b' [s1, s2] |
["boo", "foo"] | ["boo", "foo"] |
material = 'cotton' class << material def definition puts 'The better half of velour.' end end material.definition |
The better half of velour. |
The better half of velour. |
'cotton'.definition |
NoMethodError: undefined method `definition' for "cotton":String ... |
NoMethodError: undefined method `definition' for "cotton":String from (irb):12 |
material.clone.definition |
The better half of velour. |
The better half of velour. |
material.dup.definition |
NoMethodError: undefined method `definition' for "cotton":String ... |
NoMethodError: undefined method `definition' for "cotton":String from (irb):14 |
class StringHolder attr_reader :string def initialize(string) @string = string end end s1 = StringHolder.new('string') s2 = s1.dup s3 = s1.clone s1.string[1] = 'p' s2.string |
"spring" | "spring" |
s3.string |
"spring" | "spring" |
class Object def deep_copy Marshal.load(Marshal.dump(self)) end end s1 = StringHolder.new('string') s2 = s1.deep_copy s1.string[1] = 'p' s1.string |
"spring" | "spring" |
s2.string |
"string" | "string" |
class << s1 def definition puts "We hold strings so you don't have to." end end s1.deep_copy |
TypeError: singleton can't be dumped ... |
TypeError: singleton can't be dumped from (irb):29:in `dump' from (irb):29:in `deep_copy' from (irb):42 |
class StringHolder def initialize_copy(from) @string = from.string.dup end end s1 = StringHolder.new('string') s2 = s1.dup s3 = s1.clone s1.string[1] = "p" s2.string |
"string" | "string" |
s3.string |
"string" | "string" |