End of Life Ruby 3.1 has reached end of life and gets no more fixes. Switch to Ruby 4.0 →
Kernel#clone
# File tmp/rubies/ruby-3.1.3/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.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]
-