अगर मैं एक सरणी चर में एक सूची में डाल दिया और एक अन्य सरणी चर में यह क्लोन, दो अलग-अलग हैं:एक पर्ल 6 सरणी क्लोन कब क्लोन नहीं है?
my @original = 1, 3, 7;
my @clone = @original.clone;
@original[*-1] = 'Dog';
say "original is finally <@original[]> ({@original.^name})";
say "clone is finally <@clone[]> ({@clone.^name})";
उत्पादन पता चलता है कि वे एक दूसरे को प्रभावित नहीं करते:
original is finally <1 3 Dog> (Array)
clone is finally <1 3 7> (Array)
हालांकि, अगर मैं एक स्केलर चर में एक ऐरे डालता हूं, तो क्लोन दो अलग नहीं रखता है। एक बदलने के अन्य परिवर्तन:
my $original = [ 1, 3, 7 ];
say "original is <$original[]> ({$original.^name}) with {$original.elems} values";
my $clone = $original.clone;
say "clone is <$clone[]> ({$clone.^name}) with {$clone.elems} values";
if $original eqv $clone {
say "The original and clone have the same values!";
}
if $original === $clone {
say "The original and clone are the same object!";
}
if $original =:= $clone {
say "The original and clone are the same container!";
}
$original[*-1] = 'Dog';
say "original is finally <$original[]> ({$original.^name}) with {$original.elems} values";
say "clone is finally <$clone[]> ({$clone.^name}) with {$clone.elems} values";
उत्पादन से पता चलता है कि मूल और क्लोन अभी भी जुड़े हुए हैं, लेकिन दिलचस्प वे एक ही वस्तु या कंटेनर नहीं हैं:
original is <1 3 7> (Array) with 3 values
clone is <1 3 7> (Array) with 3 values
The original and clone have the same values!
original is finally <1 3 Dog> (Array) with 3 values
clone is finally <1 3 Dog> (Array) with 3 values
यह एक है, जहां काम करता है
my $original = [ 1, 3, 7 ];
my @clone = $original.clone;
$original[*-1] = 'Dog';
say "original is finally <$original[]> ({$original.^name})";
say "clone is finally <@clone[]> ({@clone.^name})";
लेकिन जब मूल एक सरणी है और क्लोन एक अदिश चर को सौंपा गया है, यह काम नहीं करता: क्लोन एक सरणी चर को असाइन किया गया
012,my @original = 1, 3, 7;
my $clone = @original.clone;
@original[*-1] = 'Dog';
say "original is finally <@original[]> ({@original.^name})";
say "clone is finally <$clone[]> ({$clone.^name})";
यह राकुडो 2017.01 है।
यह एक बग है और राकुडो '2017.02' में तय किया गया था। राकुडो 2017.01 और इससे पहले, 'ऐरे' वर्ग में अपनी 'क्लोन' विधि नहीं है, इसलिए '$ aclone' को कॉल करना वास्तव में' Mu.clone' को कॉल करें। – cuonglm
क्या इसके लिए कोई टिकट है? मैंने आरटी में देखा और एक नहीं मिला। –
यह यहां है https://rt.perl.org/Public/Bug/Display.html?id=129762 – cuonglm