2008-10-06 34 views
35

Perl 6 eşitlik operatörlerinin patlamasına sahip gibi görünüyor. =:= nedir? leg ve cmp arasındaki fark nedir? Veya eqv ve ===?Tüm farklı Perl 6 eşitlik operatörleri ile anlaşma nedir? (==, ===, eq, eqv, ~~, =: =, ...)

Herkes iyi bir özeti var mı? reddit itibaren

+1

Eğer '...' de geçerli bir operatör olduğunu biliyor muydunuz? –

+2

Neden karmaşıklık korkusu var? Tüm özellikleri kullanmanıza gerek yoktur. Neye ihtiyacın olduğunu öğren. – Aftershock

cevap

36

=:= testler, yani bir değişiklik, diğer bir değişiklik yaparsa yanı? Diğerlerine gelince

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 

: İki referansın aynı nesneyi işaret eğer === testler ve aşağıda belirtilen iki eğer eqv testler yapısal olarak eşdeğerdir. Bu nedenle [1, 2, 3] === [1, 2, 3] yanlış olacaktır (aynı dizi değil), ancak [1, 2, 3] eqv [1, 2, 3] doğru olacaktır (aynı yapı). Perl 6 en cmp akıllı ve leg gibi <=> gibi numaraları ve dizeleri karşılaştırmak olurken

leg, Perl 5 en cmp gibi dizeleri karşılaştırır.

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. 

Son olarak ~~ "akıllı maç", bu soruyu yanıtlar "$x maçı $y yapar" dir. $y bir türse, tür denetimi. $y bir regex ise, regex eşleşmesi - vb.

+1

Perl 5'in "eqv" özelliği yok. Sanırım orada 'cmp' demek istedin. – cjm

17

bugün: İki konteynır (dizi veya sağlamalarının değişkenler veya öğeler) yumuşatılmaz ise

A comparison of the Perl equality operators

+0

Teşekkürler, ama hala anlamıyorum ne =: = yok. Ve bacak ve cmp arasındaki fark nedir? – raldi

+0

Bildiğim kadarıyla, =: = yalnızca takma adlar atadıysanız önemlidir. http://perlgeek.de/blog-tr/perl-5-to-6/ cmp'ye göre şimdi cmp yeniden adlandırılmış, bu yüzden aynı olmalıdır. – Randy

+0

Aynı değil (ve bu blogda böyle demedim umarım), cmp bacağından daha akıllıdır. – moritz

12

Synopsis 3: Comparison semantics'daki özet istediğiniz şeyi yapar mı, yoksa zaten okuyor muydunuz? Tasarım dokümanları, bu özelliklerin kullanıldığı test dosyalarına bağlanır, böylece kullanım örneklerini ve mevcut test durumlarını görebilirsiniz.

Perl 6'nın karşılaştırma operatörleri, dinamik bir dile ve devam eden şeylere çok daha uygundur. Sadece dizeleri veya sayıları karşılaştırmak yerine (ya da nesneleri dizgeye veya sayılara dönüştürerek), artık istediğiniz şeyi yapan bir operatörle işleri hassas bir şekilde test edebilirsiniz. Değeri, kabı, türü ve benzeri şeyleri test edebilirsiniz.

Açıklamalardan birinde, eqv ve cmp hakkında sorularınız varsa. Perl 5'in eski günlerinde, cmp, sıralama ve üç sihirli değerden (-1,0,1) birini döndürmek için oradaydı ve bunu her zaman dize anlamıyla yaptı. Perl 6'da cmp, Order nesnesinin üç türünden birini döndürür, böylece -1, 0 veya 1'in ne anlama geldiğini hatırlamanız gerekmez. Ayrıca, yenidizge anlamını zorlamaz, bu nedenle (1, 10, 11, 2, 20, 21 ... gibi sıralayacaktır Perl 5'in aksine) numaralar teslim edildiğinde daha akıllı olabilir.

leg (daha l nakline, e Qual, daha reater g) dize semantik ile cmp olup. Bu, Perl 6'nın ~'un, dizge anlamlarını zorlayan yeni "string contextualizer" olduğu ~$a cmp ~$b olarak tanımlanmıştır. leg ile, her zaman eski Perl 5 cmp gibi bir dize karşılaştırması yapıyorsunuz.

Diğer operatörler hakkında hala sorularınız varsa, bunları ayrı sorulara bölelim. :)

+0

Ayrıca bkz. Http://docs.perl6.org/ - burada bireysel operatörleri arayabilirsiniz. – Coke

2

Bu aynı zamanda kullanışlı bir referans kılavuzdur:

Perl6 Periodic Table of Operators

+1

Bu yazdırma güzel iken, mevcut sürümün geçerli sürümü ile güncel değil, Perl 6.c – Coke

+0

@Coke iyi, bu * 2010 yılında yazıldı, ancak cevap hala aktif bir kullanıcı 'd güncelleme – cat

+0

@tac cevap' topluluk wiki 'olarak işaretlendi, böylece herkes bunu düzenleyebilir. Ya da, bir güncellemede beklediğiniz güncellemeyi açıklığa kavuşturabilirsiniz. – Ether

İlgili konular