Quel est le problème avec tous les différents opérateurs d'égalité Perl 6? (==, ===, éq, eqv, ~~, =: =, & # 8230;)

StackOverflow https://stackoverflow.com/questions/176343

  •  05-07-2019
  •  | 
  •  

Question

Perl 6 semble avoir une explosion d'opérateurs d'égalité. Qu'est-ce que =: = ? Quelle est la différence entre leg et cmp ? Ou eqv et === ?

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

Était-ce utile?

La solution

=: = vérifie si deux conteneurs (variables ou éléments de tableaux) ou hashes) sont aliasés, c'est-à-dire que si l'un change, l'autre change-t-il aussi?

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: === vérifie si deux références pointent vers le même objet et eqv vérifie si deux éléments sont structurellement équivalents. 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 des chaînes telles que le cmp de Perl 5, tandis que le cmp de Perl 6 est plus intelligent et comparera des nombres tels que < = > ; et des chaînes telles que 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 la "correspondance intelligente", elle répond à la question "le $ x correspond-il à $ y ". Si $ y est un type, c'est un contrôle de type. Si $ y est une expression rationnelle, sa correspondance est une expression régulière - et ainsi de suite.

Autres conseils

Le résumé présenté dans la Synopsis 3: Sémantique de comparaison fait ce que vous voulez ou était-il tu lis déjà ça? Les documents de conception sont liés aux fichiers de test dans lesquels ces fonctionnalités sont utilisées. Vous pouvez ainsi voir des exemples de leur utilisation et de leur état de test actuel.

Les opérateurs de comparaison de Perl 6 sont beaucoup plus adaptés à un langage dynamique et à tout ce qui se passe. Au lieu de simplement comparer des chaînes ou des chiffres (ou de transformer des éléments en chaînes ou en chiffres), vous pouvez maintenant tester les éléments avec précision, avec un opérateur qui fait ce que vous voulez. Vous pouvez tester la valeur, le conteneur, le type, etc.

Dans l'un des commentaires, vous posez des questions sur eqv et cmp . Dans l'ancien temps de Perl 5, cmp était présent pour le tri et renvoyait l'une des trois valeurs magiques (-1,0,1), toujours avec la sémantique de chaîne. En Perl 6, cmp renvoie l'un des trois types d'objets Order , de sorte que vous n'avez pas à vous rappeler ce que -1, 0 ou 1 signifie. De plus, le nouveau cmp ne force pas la sémantique des chaînes de caractères, il peut donc être plus intelligent quand on leur donne des nombres (contrairement à Perl 5 qui trierait comme 1, 10, 11, 2, 20, 21 ...) .

La jambe ( l que, e qual, g supérieur à) est cmp avec la sémantique des chaînes. Il est défini en tant que ~ $ a cmp ~ $ b de Perl 6, où ~ est le nouveau " contextualizer de chaîne " qui force la sémantique des chaînes. Avec leg , vous effectuez toujours une comparaison de chaînes, tout comme l’ancien Perl 5 cmp .

Si vous avez encore des questions sur les autres opérateurs, divisez-les en questions distinctes. :)

C’est également un guide de référence pratique:

Tableau périodique des opérateurs Perl6

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top