인수를 배열에 대한 참조로 반환하는 함수를 작성하는 방법은 무엇입니까? \@foo
구조체 컨텐츠 나중에 변경 될 수 @foo
배열에 대한 참조를 생성하면서함수가 인수 목록을 배열 참조로 반환하는 방법
0
A
답변
12
sub f {
return [@_];
}
$ref = f(2, 3, 5);
print "@$ref\n";
[@foo]
구조체는, 새로운 익명 어레이 (@foo
의 복사본)에 대한 참조를 생성한다.
2
배열로 인수를 반환하는 서브 루틴을 만들 수있는 몇 가지 방법이 있습니다
array
와
capture
사이에 몇 가지 중요한 차이가 있습니다
sub array {[@_]} # returns an array reference that is a copy of its argument
sub array_verbose { # the same as array(), but spelled out
my @copy = @_;
return \@copy;
}
sub capture {\@_} # returns a reference to the actual argument array
:
my ($x, $y) = (3, 4);
my $array = array $x, $y;
my $capture = capture $x, $y;
say "@$array, @$capture"; # prints '3 4, 3 4'
$x++;
say "@$array, @$capture"; # prints '3 4, 4 4'
$$capture[1] *= 2;
say "@$array, @$capture"; # prints '3 4, 4 8'
say "$x $y"; # prints '4 8'
이러한 예를 보여 바와 같이, array()
에 의해 생성 된 배열은 값에 의해 복사되며이 값은 원래 인수와 독립적입니다. capture()
에 의해 생성 된 배열은 인수 목록에 대한 양방향 별칭을 유지합니다.
또 다른 차이점은 속도입니다. capture()
은 array()
보다 약 40 % 빠릅니다. 배열 요소를 복사 할 필요가 없기 때문입니다. 물론이 속도 차이는 인수 목록의 길이에 따라 달라집니다.
capture()
심지어 요소를 접촉하지의 또 다른 효과는 일반적으로 메모리를 할당 할 인수를 사용하는 경우 인수가 접촉 될 때까지, 그 할당이 일어나지 않을 것입니다 : 내 자신의 코드에서
my %hash;
my $hashcap = capture $hash{a}, $hash{b}, $hash{c};
say join ', ' => keys %hash; # prints nothing
$_++ for @$hashcap;
say join ', ' => keys %hash; # prints 'c, a, b'
, 나는 보통 cap()
로 capture()
을 주문하거나 인라인을 쓰기 :
my $y = sub{\@_}->(map $_**2, 1..10);
관련 문제
- 1. Perl에서 배열 참조로 목록을 반환하려면 어떻게해야합니까?
- 2. 함수가 두 값을 반환하는 방법
- 3. 줄임표 인수 목록을 R
- 4. 참조로 배열 전달
- 5. 참조로 배열 사용
- 6. SwingWorker를 사용하여 목록을 반환하는 방법
- 7. Readonly 바인딩 목록을 반환하는 방법
- 8. tcl에서 배열 목록을 얻는 방법
- 9. Java에서 배열 목록을 사용하는 방법?
- 10. Mathematica에서 가변 인수 목록을 얻는 방법
- 11. omnicppcomplete가 빈 인수 목록을 자동으로 닫게하는 방법?
- 12. 명령 줄 인수 배열
- 13. 플래시 : 나머지 인수 및 배열 : 방법?
- 14. PHP 함수 배열 인수 조작
- 15. 안드로이드 aidl 파일 MyObject의 목록을 반환하는 방법?
- 16. webdav에서 svn 디렉토리 목록을 반환하는 방법
- 17. C#에서 Windows 프로세스 목록을 반환하는 방법?
- 18. 아래의 코드에서 URL 목록을 반환하는 방법
- 19. 이 함수가 포인터를 반환하는 이유는 무엇입니까?
- 20. PowerEnumerate 함수가 반환하는 구조/데이터
- 21. 키에서 PHP 배열 값을 반환하는 방법?
- 22. AS3 : 배열 항목 참조로 객체 제거
- 23. 자바 스크립트 배열 인수 문제
- 24. 개체를 배열 참조로 만드는 방법은 무엇입니까?
- 25. 일반 목록을 반환하는 방법은 무엇입니까?
- 26. 배열 함수가 끝날 때까지 대기 :
- 27. PHP 로컬 배열 함수가 있습니까?
- 28. 자동 변수의 배열 크기를 입력 인수
- 29. 배열을 반환하는 올바른 방법
- 30. VBScript 스크립트에 전달 된 인수 목록을 출력하는 방법?