2008-10-06 2 views
35

Perl 6은 항등 연산자가 폭발적으로 증가한 것 같습니다. =:=은 무엇입니까? legcmp의 차이점은 무엇입니까? 또는 eqv===?모든 다른 Perl 6 평등 연산자는 무엇이 다릅니 까? (==, ===, eq, eqv, ~~, = : =, ...)

누구나 요약 할만합니까? 레딧에서

+1

당신이'...'또한 유효한 연산자는 것을 알고 계십니까? –

+2

왜 복잡성에 대한 두려움이 있습니까? 모든 기능을 사용할 필요는 없습니다. JUst는 필요한 것을 배웁니다. – Aftershock

답변

36

=:= 테스트, 즉 하나 명의 변경, 다른 변화를 않는 경우도? 다른 사람에 관해서는

my $x; 
my @a = 1, 2, 3; 
# $x =:= @a[0] is false 
$x := @a[0]; 
# now $x == 1, and $x =:= @a[0] is true 
$x = 4; 
# now @a is 4, 2, 3 

: 두 개의 참조가 같은 객체를 가리키는 경우 === 테스트 및 두 가지 경우 eqv 시험은 구조적으로 동일합니다. 따라서 [1, 2, 3] === [1, 2, 3]은 거짓 (같은 배열 아님)이지만 [1, 2, 3] eqv [1, 2, 3]은 참 (동일한 구조)이됩니다. 펄 6의 cmp 똑똑하고 leg처럼 <=> 같은 숫자와 문자열을 비교합니다 동안

leg는 펄 5의 cmp 같은 문자열을 비교합니다.

13 leg 4 # -1, because 1 is smaller than 4, and leg converts to string 
13 cmp 4 # +1, because both are numbers, so use numeric comparison. 

마지막 ~~는 "스마트 일치"는 질문에 대한 대답 "$x 일치 $y을한다"입니다. $y이 유형이면 형식 검사입니다. $y이 정규식이면 정규식 일치입니다.

+1

Perl 5에는 'eqv'가 없습니다. 나는 당신이 거기에서 'cmp'을 의미했다고 생각합니다. – cjm

17

오늘 : 두 개의 용기 (배열이나 해시의 변수 나 항목) 앨리어스 경우

A comparison of the Perl equality operators

+0

고마워,하지만 난 아직도 이해가 안 = : = =. 다리와 cmp의 차이점은 무엇입니까? – raldi

+0

내가 아는 한 = : = 별칭을 할당 한 경우에만 문제가 발생합니다. http://perlgeek.de/blog-en/perl-5-to-6/에 따르면 cmp는 이제 leg로 이름이 변경되었으므로 동일해야합니다. – Randy

+0

동일하지 않습니다 (그리고 나는 그 블로그에서 그렇게 말하지 않기를 바랬습니다), cmp는 다리보다 "똑똑"합니다. – moritz

12

Synopsis 3: Comparison semantics의 요약 내용은 이미 알고 있습니까? 디자인 문서는 해당 기능이 사용되는 테스트 파일로 연결되므로 사용 예제와 현재 테스트 상태를 볼 수 있습니다.

Perl 6의 비교 연산자는 동적 언어와 모든 작업에 훨씬 적합합니다. 단순히 문자열이나 숫자를 비교하는 것 (또는 문자열이나 숫자로 바꾸는 것) 대신 원하는 것을 수행하는 연산자로 정확하게 테스트 할 수 있습니다. 값, 컨테이너, 유형 등을 테스트 할 수 있습니다.

의견 중 하나는 eqvcmp입니다. Perl 5의 옛날에는 cmp이 정렬을 위해 세 가지 마법 값 (-1,0,1) 중 하나를 반환하고 문자열 의미론을 항상 사용했습니다. Perl 6에서 cmpOrder 개체의 세 가지 유형 중 하나를 반환하므로 -1, 0 또는 1을 의미하는 것을 기억할 필요가 없습니다. 또한 새로운 cmp은 문자열 의미를 강요하지 않으므로 (Perl 5의 1, 10, 11, 2, 20, 21 ...과는 달리) 수를 넘으면 더 똑똑해질 수 있습니다.

leg (보다 리터 ESS, E QUAL보다 reater g)는 문자열 의미론 cmp이다. Perl 6의 ~$a cmp ~$b으로 정의됩니다. 여기서 ~은 문자열 의미를 강제하는 새로운 "문자열 상황화 기"입니다. leg을 사용하면 이전 Perl 5 cmp처럼 항상 문자열 비교를 수행합니다.

다른 연산자에 대해 질문이있는 경우 별도의 질문으로 나누십시오. :)

+0

http://docs.perl6.org/도 참조하십시오. 개별 운영자를 검색 할 수 있습니다. – Coke

2

이것은 또한 편리한 참조 가이드 :

Perl6 Periodic Table of Operators

+1

이 인쇄물은 멋지지만, 현재 버전의 사양에서는 최신 버전이 아닙니다. Perl 6.c – Coke

+0

@Coke 글쎄, * * 2010 년에 작성되었지만 응답자는 여전히 활성 사용자이므로 그것을 업데이 트 – cat

+0

@ tac 대답은 '커뮤니티 위키'로 표시되어 누구나 편집 할 수 있습니다. 또는 예상되는 업데이트에 대한 설명을 명확히 할 수 있습니다. – Ether

관련 문제