3
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
https://docs.perl6.org/routine/$EQUALS_SIGN$EQUALS_SIGN 당신에게 매트 감사! 그래서 한 배열을 다른 배열에 할당하면 내용이 복사되고 별개의 배열이됩니다. – lisprogtor
예, 아니오. 스칼라 유형에 대한 얕은 복사본을 얻습니다. 따라서 컨테이너와 같은 것들은 다른 배열을 말하면서 동일한 목록을 가리키는 새로운 컨테이너 만 가져옵니다. 그래서 당신이 기대하지 않는 것일 수도 있습니다 :'my @a = [1, [2,3]]; 내 @b = @a; @b [1] [0] = 4;'이것은 @a에서 4가되도록 2를 변경합니다! –
깊은 복사본이 필요하면 이전에 여기에서 대답했습니다. http://stackoverflow.com/questions/38582873/does-perl-6-have-a-built-in-tool-to-make-a-deep- 중첩 데이터 구조체의 복사본 –