Kernel#clone
# File tmp/rubies/ruby-4.0.0/kernel.rb, line 47
def clone(freeze: nil)
Primitive.rb_obj_clone2(freeze)
end
Produces a shallow copy of obj—the instance variables of obj are copied, but not the objects they reference. clone copies the frozen value state of obj, unless the :freeze keyword argument is given with a false or true value. See also the discussion under Object#dup.
class Klass attr_accessor :str end s1 = Klass.new #=> #<Klass:0x401b3a38> s1.str = "Hello" #=> "Hello" s2 = s1.clone #=> #<Klass:0x401b3998 @str="Hello"> s2.str[1,4] = "i" #=> "i" s1.inspect #=> "#<Klass:0x401b3a38 @str=\"Hi\">" s2.inspect #=> "#<Klass:0x401b3998 @str=\"Hi\">"
This method may have class-specific behavior. If so, that behavior will be documented under the #initialize_copy method of the class.
Ruby version changes
-
3.3
-
Now
Proc#dupandProc#clonecall initialize_dup and initialize_clone hooks respectively. [Feature #19362]
-
-
3.0
-
Kernel#clonewhen called with thefreeze: falsekeyword will call initialize_clone with thefreeze: falsekeyword. [Bug #14266] -
Kernel#clonewhen called with thefreeze: truekeyword will call initialize_clone with thefreeze: truekeyword, and will return a frozen copy even if the receiver is unfrozen. [Feature #16175]
-