O co chodzi z różnymi operatorami równości Perla 6? ( = = ,==, eq, eqv,~~,=: =, …)

Perl 6 wydaje się mieć eksplozję operatorów równości. Co to jest =:=? Jaka jest różnica między leg A cmp? Albo eqv i ===?

Czy ktoś ma dobre podsumowanie?

Author: jjmerelo, 2008-10-06

4 answers

=:= sprawdza, czy dwa kontenery (zmienne lub elementy tablic lub hashów) są aliasowane, tzn. jeśli jeden się zmienia, czy drugi również się zmienia?

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 

Co do pozostałych: === sprawdza, czy dwa odniesienia wskazują na ten sam obiekt, a eqv sprawdza, czy dwie rzeczy są strukturalnie równoważne. Tak więc [1, 2, 3] === [1, 2, 3] będzie false( nie ta sama tablica), ale [1, 2, 3] eqv [1, 2, 3] będzie true (ta sama struktura).

leg porównuje struny jak Perl 5 cmp, podczas gdy Perl 6 cmp jest mądrzejszy i będzie porównywał liczby takie jak <=> i ciągi takie jak leg.

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.

Wreszcie ~~ jest "smart match", odpowiada na pytanie "czy $x pasuje $y". Jeśli $y jest typem, to sprawdza typ. Jeśli $y jest regex, to regex match-i tak dalej.

 44
Author: moritz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-14 09:47:45
 23
Author: Randy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-06 21:53:13

Czy podsumowanie w Synopsis 3: semantyka porównawcza robi to, co chcesz, czy już to czytałeś? Dokumenty projektowe łączą się z plikami testowymi, w których te funkcje są używane, dzięki czemu można zobaczyć przykłady ich użycia i ich aktualny stan testowy.

Operatory porównawcze Perla 6 są znacznie bardziej dostosowane do dynamicznego języka i wszystkich rzeczy, które się dzieją. Zamiast po prostu porównywać ciągi lub liczby (lub zamieniać rzeczy w ciągi lub liczby), teraz możesz testować rzeczy dokładnie z operatorem, który robi to, co chcesz. Możesz przetestować wartość, kontener, typ i tak dalej.

W jednym z komentarzy pytasz o eqv i cmp. W dawnych czasach Perla 5, cmp był tam do sortowania i zwraca jedną z trzech magicznych wartości (-1,0,1), i robił to zawsze z semantyką łańcuchów. W Perlu 6, cmp zwraca jeden z trzech typów obiektów Order, więc nie musisz pamiętać, co oznacza -1, 0 lub 1. Ponadto, Nowa cmp nie wymusza semantyki ciągów, więc może być mądrzejszy, gdy podaje się liczby (w przeciwieństwie do Perla 5, który 1, 10, 11, 2, 20, 21 ...).

The leg (l ESS than, E qual, g reater than) jest cmp semantyką łańcuchową. Jest zdefiniowany jako ~$a cmp ~$b Perla 6, gdzie ~ jest nowym "kontekstualizatorem łańcuchów", który wymusza semantykę łańcuchów. Z leg, zawsze robisz porównanie łańcuchów, tak jak stary Perl 5 cmp.

Jeśli nadal masz pytania na temat innych operatorów, niech podziel je na osobne pytania. :)

 18
Author: brian d foy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-27 02:40:32

Jest to również przydatny przewodnik referencyjny:

Perl6 układ okresowy operatorów

 3
Author: Ether,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-14 14:47:21