В perl6 я хочу назначить массив другому массиву и получить результирующий массив как отдельную сущность, но, похоже, ни прямое назначение, ни клонирование не могут делать то, что я хочу. Есть ли способ скопировать массив с одним выражением вместо написания цикла?Назначение массива perl6: указатель или копия?
To exit type 'exit' or '^D'
> my @a=<a b c d e>
[a b c d e]
> my @b = <1 2 3 4 5 6 7>
[1 2 3 4 5 6 7]
> my @c = @a
[a b c d e]
> @c[3]
d
> @c[3]=3;
3
> @c
[a b c 3 e]
> @a
[a b c d e]
> @c === @a
False
> @c == @a
True # this is unexpected, @c and @a should be different, right?
> my @[email protected]
[a b c d e]
> @x[3]=3
3
> @x
[a b c 3 e]
> @x === @a
False
> @x == @a
True # unexpected, @x and @a should be distinct things, right?
>
спасибо!
lisprog
Спасибо Matt !! Итак, когда я присваиваю один массив другому, содержимое копируется, и они представляют собой различные массивы, верно? – lisprogtor
Да и нет. Вы получаете мелкую копию для скалярных типов. Так что вещи, которые похожи на контейнер, говорят о другом массиве, вы получаете только новый контейнер, указывающий на тот же список. Итак, пример, где, возможно, не то, что вы ожидаете: 'my @a = [1, [2,3]]; my @b = @a; @b [1] [0] = 4; 'Это изменит 2 на 4 в @a тоже! –
Если вы хотите получить глубокую копию, то на это был дан ответ ранее здесь http://stackoverflow.com/questions/38582873/does-perl-6-have-a-built-in-tool-to-make-a-deep- копирования из-а-вложенных структуры данных –