15 - making a copy of an object.rb
来自「O Reilly Ruby Cookbook source code」· RB 代码 · 共 74 行
RB
74 行
s1 = 'foo' # => "foo"s2 = s1.clone # => "foo"s1[0] = 'b'[s1, s2] # => ["boo", "foo"]#---material = 'cotton'class << material def definition puts 'The better half of velour.' endendmaterial.definition# The better half of velour.'cotton'.definition# NoMethodError: undefined method `definition' for "cotton":Stringmaterial.clone.definition# The better half of velour.material.dup.definition # NoMethodError: undefined method `definition' for "cotton":String#---class StringHolder attr_reader :string def initialize(string) @string = string endends1 = StringHolder.new('string')s2 = s1.dups3 = s1.clones1.string[1] = 'p's2.string # => "spring"s3.string # => "spring"#---class Object def deep_copy Marshal.load(Marshal.dump(self)) endends1 = StringHolder.new('string')s2 = s1.deep_copys1.string[1] = 'p's1.string # => "spring"s2.string # => "string"#---class << s1 def definition puts "We hold strings so you don't have to." end ends1.deep_copy# TypeError: singleton can't be dumped#---class StringHolder def initialize_copy(from) @string = from.string.dup endends1 = StringHolder.new('string')s2 = s1.dups3 = s1.clones1.string[1] = "p"s2.string # => "string"s3.string # => "string"#---
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?