Eu quero clonar uma matriz multidimensional @a
em uma matriz @b
.
Eu procedi da maneira mais intuitiva e criei o seguinte:
my @a = [0, 0, 0], [0, 0, 0], [0, 0, 0];
my @b = @a.clone;
@a[0][1] = 1;
@b[1][0] = 1;
say '@a : ' ~ @a.gist;
say '@b : ' ~ @b.gist;
e a impressão é:
@a : [[0 1 0] [1 0 0] [0 0 0]]
@b : [[0 1 0] [1 0 0] [0 0 0]]
Isso significa que as duas matrizes @a e @b estão ligadas?
Questões:
- Por que o array @a está vinculado ao array @b (qual é o objetivo do método clone nessa situação? Sabemos que o clone se comporta como pretendido para matrizes unidimensionais)
- Como posso realmente clonar @a a @b (multidimensional)?
- Qual é a maneira mais eficiente (tempo limitado) de fazer isso?
Scalar
(letras maiúsculas 'S') para significar o padrão de Raku construído em contêiner escalar . AScalar
nunca é uma matriz; mas pode conter (uma referência a) umArray
. Uma atribuição@a[0][1] = ...
não altera o escalar ouScalar
@a[0]
e também não coloca um novoArray
noScalar
contêiner@a[0]
. Apenas altera o valor mantido no 2ºScalar
no existenteArray
retido noScalar
limite existente para@a[0]
.@a
e@b
não estão vinculados . Eles apenas contêm as mesmas coisas. Oclone
não recurva e apenas clona a matriz externa.Uma maneira de conseguir o que você quer seria
fonte