Perl이 함수에 대한 참조로 인수를 전달할 수있는 능력이 있는지 궁금합니다. 파이썬도 루비도 그런 특징을 가지고 있지 않다는 것을 알고 있습니다.왜 펄은 참조로 인수를 허용합니까?
답변
한 가지를 구별하는 것이 유용합니다.
(1) 서브 루틴 에 대한 인수를으로 전달. 언어가 서브 루틴에 대한 모든 인수를 미분 값 목록으로 전달하기 때문에 Perl에서 유용합니다. 데이터 구조를 참조로 전달할 수없는 경우 함수의 설계자는 예를 들어 두 개의 목록을 사용하여 목록을 분리 된 상태로 유지할 수 없습니다. 또한 데이터 구조가 큰 경우 참조로 전달하면 성능이 향상됩니다. 파이썬과 루비는 다르게 설계 되었기 때문에
process_two_lists(@x, @y); # Can't distinguish the lists.
process_two_lists(\@x, \@y); # Can.
, 그들은 인수가 전달되는 방법이 구별을 필요로하지 않습니다. Python이나 Ruby의 비슷한 메소드는 두 개의 별개의 인수 (리스트 x
및 y
을 나타내는 두 개의 객체)를받습니다.
(2)의 동작은 펄 @_
호출자이인지 서브 루틴은 데이터를 수정하는 것을 허용 할 별명 전달 인자에 역할있다.
sub add_ten_to_me {
$_[0] += 10;
}
my $x = 1;
add_ten_to_me($x);
say $x; # 11 Amazing!
파이썬과 루비는 이러한 유형의 작업을 수행 할 수 있습니다. 그러나, 몇 가지 자격이 있습니다. 파이썬은 을과 사이에서 변경할 수 없으며 개체로 구분합니다. Python 메소드 (예 :리스트)에 변경 가능한 것을 전달하면 메소드는 데이터 구조를 수정할 수 있습니다. 따라서 process_two_lists
의 Python 버전은 x
과 y
을 모두 수정할 수 있습니다. 그러나, 불변 객체 (정수 등)를받는 함수는 그렇지 않습니다. 따라서 add_ten_to_me
의 직접 파이썬 아날로그는 작동하지 않습니다. [Ruby에 관해서도 비슷한 점이 있다고 생각합니다. 그러나 지금은 세부 사항에 익숙하지 않습니다.]
# 2는 사람들이 보통 "pass-by-reference"라고 부르는 것입니다. # 1은 참조 전달 – user102008
참조를 통해 인수를 전달하면 성능이 크게 향상 될 수 있습니다.
Perl이 선택 사항을 제공합니다. TIMTOWTDI 아이디어의 일부라고 생각합니다. 유연한 방법이므로 필요한 것을 할 수 있습니다. 인수에 $_[0]
으로 액세스하면 동일한 객체입니다. 그것을 옮기거나 어휘로 복사한다면 그것은 가치있는 것입니다.
이렇게 생각하면됩니다. 대부분의 코드는 가치에 따라 다르지만 필요한 경우 참조가 있습니다.
- 1. .net 예제에서 인수를 참조로 전달해야합니까?
- 2. 왜 자바가 이것을 허용합니까?
- 3. 펄은
- 4. 펄은
- 5. 펄은
- 6. 왜 펄은 정규식에서 여분의 문자를 무시합니까?
- 7. 펄은 : 함수는
- 8. 사용하여 펄은
- 9. 왜 앵커 이름에 AlphaNumeric 만 허용합니까?
- 10. 왜 pop()이 인수를 취해야합니까?
- 11. 활성 펄은 @ARGV에서 "^"를 자릅니다
- 12. JScript에서 참조로 인수를 전달하는 out 인수로 함수 호출
- 13. 이식 가능하게 인수를 PHP의 ReflectionMethod :: invokeArgs에 참조로 전달합니다
- 14. 인수를 참조로 전달하고 반환 할 때 필수 승격?
- 15. 자바에서 시작된 펄은 영원히 걸린다
- 16. maven release plugin이 왜 SNAPSHOT 버전을 종속성 관리에서 허용합니까?
- 17. 왜 일부 HTML 요소는 "크로스 오버"를 허용합니까?
- 18. LLVM, 참조로 호출
- 19. "참조로"변수가 업데이트 되었습니까?
- 20. 비주얼 스튜디오에서 참조로 나타난다
- 21. 어떻게이 정규식에서 공백을 허용합니까?
- 22. MapKit은 StreetView를 허용합니까?
- 23. git push는 권한을 허용합니까?
- 24. HTTP는 확장을 허용합니까?
- 25. 파티션이 여러 대량로드를 허용합니까?
- 26. Tomcat은 IP를 허용합니까?
- 27. grep에서 중복 검색을 허용합니까?
- 28. 펄은 파이썬과 같은 문자열을 곱할 수 있습니까?
- 29. 펄은 + 한 줄 변경 문자열 경우에만 라인
- 30. PHP의 print_r()과 같은 펄은 무엇입니까?
암시 적 또는 명시 적으로 참조 전달 중이십니까? 아마도 당신이 의미하는 것을 보여 줄 수 있습니다. – TLP
왜 인수를 참조로 전달할 수있는 기능을 생략하고 싶습니까? –
별칭을 포함하고있는'@ _ '은 Perl 3 일 전까지 사람들이 의존했던 우연한 기능이었습니다. p5p 아카이브와 git repo의 검색은 비어 있지만 @tchrist 또는 @merlyn은 대답을 알 수 있습니다. –