44 votes

Qu'est-ce qui #39;s l'accord avec tous les différents opérateurs d'égalité Perl 6? (,, eq, eqv, ', ':, ...)

Perl 6 semble avoir une explosion des opérateurs d'égalité. Qu'est-ce que c'est ? Quelle est la différence entre et ? Ou et `` ?

Quelqu'un at-il un bon résumé?

46voto

moritz Points 6295

=:= teste si deux conteneurs (variables ou de tableaux ou de hachages) sont des alias, c'est à dire si l'une change, l'autre changement?

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

Comme pour les autres: === teste si deux références pointent vers le même objet, et eqv teste si deux choses sont structurellement équivalent. Donc, [1, 2, 3] === [1, 2, 3] sera faux (pas le même tableau), mais [1, 2, 3] eqv [1, 2, 3] sera vrai (même structure).

leg compare les chaînes de caractères comme Perl 5 cmp, tandis que Perl 6 cmp est plus intelligent et comparer des nombres comme <=> et des chaînes de caractères comme 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.

Enfin ~~ est le "smart match", il répond à la question suivante "est - $x correspondent $y". Si $y est un type, il est vérification de type. Si $y est une expression régulière, c'est regex match - et ainsi de suite.

21voto

Randy Points 3196

21voto

brian d foy Points 71781

Le résumé en Résumé 3: Comparaison sémantique de faire ce que vous voulez, ou avez vous lu cela? Plume de la version du synopsis des liens vers les fichiers de test lorsque ces caractéristiques sont utilisés, de sorte que vous pouvez voir des exemples de leur utilisation et de leur essai de courant de l'état.

Perl 6 opérateurs de comparaison sont beaucoup plus adaptés à la dynamique de la langue et de toutes les choses qui se passent. Au lieu d'une simple comparaison de chaînes de caractères ou de chiffres (ou de tourner les choses dans des chaînes ou des nombres), vous pouvez maintenant tester les choses précisément avec un opérateur qui fait ce que vous voulez. Vous pouvez tester la valeur, le conteneur, le type, et ainsi de suite.

Dans un des commentaires, vous vous demandez eqv et cmp. Dans les vieux jours de Perl 5, cmp était là pour le tri et renvoie l'un des trois magie valeurs (-1,0,1), et il l'a fait avec de la ficelle de la sémantique toujours. En Perl 6, cmp retourne l'un des trois types d' Order objets, de sorte que vous n'avez pas à vous souvenir de ce -1, 0, ou 1 signifie. Aussi, le nouveau cmp n'a pas la force de la chaîne de la sémantique, de sorte qu'il peut être plus intelligent lors de la remise des nombres (à la différence de Perl 5 qui permettrait de trier comme 1, 10, 11, 2, 20, 21 ...).

L' leg (less que, equal, greater qu') est - cmp avec de la ficelle de la sémantique. Il est défini comme Perl 6 ~$a cmp ~$b~ est la nouvelle "chaîne contextualizer" que les forces de la chaîne sémantique. Avec leg, vous êtes toujours en train de faire une comparaison de chaîne, tout comme l'ancien Perl 5 cmp.

Si vous avez encore des questions sur les autres opérateurs, nous allons décomposer en questions distinctes. :)

3voto

Ether Points 34103

Il s'agit également d'un guide de référence pratique:

Tableau périodique des opérateurs Perl6

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X