Documentation for routine clone
Documentation for routine clone, assembled from the following types:
Creates a shallow clone of the invocant. Alternative values for public attributes can be provided via named arguments with names matching the attributes' names.
my = Point2D.new(x => 2, y => 3);say ; # OUTPUT: «Point(2, 3)␤»say .clone(y => -5); # OUTPUT: «Point(2, -5)␤»
method clone(Array: --> Array)
Clones the original
Array. Modifications of elements in the clone are not propagated to the original and vice-versa:
my = <a b c>; my = .clone; = 42; .push: 72;say ; # OUTPUT: «[a 42 c]␤»say ; # OUTPUT: «[a b c 72]␤»
However, note that the reifier is shared between the two Arrays, so both Arrays will have the same elements even when each is randomly-generated on reification and each element will be reified just once, regardless of whether the reification was done by the clone or the original Array. Note: just as reifying an Array from multiple threads is not safe, so is, for example, reifying the clone from one thread while reifying the original from another thread is not safe.
my = 1, … ∞; my = .clone;say [^3]; # OUTPUT: «(1 0.0216426755282736 0.567660896142156)␤»say [^3]; # OUTPUT: «(1 0.0216426755282736 0.567660896142156)␤»
method clone(:, :, :, :)
Creates a new
Date object based on the invocant, but with the given arguments overriding the values from the invocant.
say Date.new('2015-11-24').clone(month => 12); # OUTPUT: «2015-12-24␤»
method clone(:, :, :, :, :, :, :, :)
Creates a new
DateTime object based on the invocant, but with the given arguments overriding the values from the invocant.
say DateTime.new('2015-12-24T12:23:00Z').clone(hour => 0);# OUTPUT: «2015-12-24T00:23:00Z␤»
Note that this can lead to invalid dates in some circumstances:
say DateTime.new("2012-02-29T12:34:56Z").clone(year => 2015);CATCH ;# OUTPUT: «X::OutOfRange: Day out of range. Is: 29, should be in 1..28␤»