Duplicata possible :
\=== vs. == en Ruby
Je l'ai vu utilisé plusieurs fois ces derniers temps mais je n'arrive pas à comprendre ce qu'il fait. Quelqu'un peut-il illustrer son fonctionnement ?
Duplicata possible :
\=== vs. == en Ruby
Je l'ai vu utilisé plusieurs fois ces derniers temps mais je n'arrive pas à comprendre ce qu'il fait. Quelqu'un peut-il illustrer son fonctionnement ?
Comme pour toutes les autres méthodes en Ruby (ou en fait dans presque tous les langages orientés objet),
a === b
signifie que l'auteur de a
de la classe de l'école veut qu'il signifie.
Cependant, si vous ne voulez pas embrouiller vos collègues, la convention est la suivante ===
es el cas de subsomption opérateur. Il s'agit essentiellement d'un opérateur booléen qui pose la question " Si j'ai un tiroir étiqueté a
serait-il judicieux de mettre b
dans ce tiroir ? "
Une formulation alternative est " Si a
décrit un ensemble, serait b
être un membre de cet ensemble ? "
Par exemple :
(1..5) === 3 # => true
(1..5) === 6 # => false
Integer === 42 # => true
Integer === 'fourtytwo' # => false
/ell/ === 'Hello' # => true
/ell/ === 'Foobar' # => false
La principale utilisation de l ===
L'opérateur est dans case
les expressions, puisque
case foo
when bar
baz
when quux
flurb
else
blarf
end
se traduit par quelque chose (approximativement) comme
_temp = foo
if bar === _temp
baz
elsif quux === _temp
flurb
else
blarf
end
Notez que si vous voulez rechercher cet opérateur, il est généralement appelé le opérateur triple égal o opérateur tripartite o opérateur d'égalité de cas . Je n'aime vraiment pas ces noms, car cet opérateur n'a absolument rien à voir avec l'égalité.
En particulier, on s'attendrait à ce que l'égalité soit symétrique : si a
est égal à b
entonces b
doit être également égal à a
. De plus, on s'attendrait à ce que l'égalité soit transitive : si a == b
et b == c
entonces a == c
. Bien qu'il n'y ait aucun moyen de réellement garantie que dans un langage à diffusion unique comme Ruby, vous devriez au moins faire un effort pour préserver cette propriété (par exemple, en suivant la méthode coerce
protocole).
Toutefois, pour ===
il n'y a aucune attente de symétrie ou de transitivité. En fait, c'est très bien conçu no symétrique. C'est pourquoi je n'aime pas l'appeler autrement que par un nom. à distance ressemble à l'égalité. C'est aussi pour ça que je pense qu'il aurait dû s'appeler autrement. ~~~
ou autre.
Merci pour ta modification Jacob, j'étais sur le point de t'appeler ;) Je vais quand même poster quelques exemples. L'implémentation de === diffère selon le type. Par exemple :
(1...3) === 2
=> true
/test/ === "this is a test"
=> true
case 'test'
when /blah/
"Blach"
when /test/
"Test"
else
"Fail"
end
=> "Test"
Stephen, caissier http://ruby-doc.org/docs/ProgrammingRuby/ (la "pioche"), elle devrait pouvoir vous aider à répondre à des questions de ce type à l'avenir.
En Ruby, le ===
L'opérateur est utilisé pour tester l'égalité au sein d'un when
clause d'un case
déclaration. Dans d'autres langues, ce qui précède est vrai.
A ma connaissance, Ruby ne dispose pas de Les vrais opérateurs ils sont tous méthodes qui sont invoqués sur le LHS de l'expression, en passant dans le RHS de l'expression. Donc, en réalité, vous pouvez surcharger n'importe quel "opérateur" dans vos classes pour qu'il exécute ce que vous voulez (analogue à la surcharge d'opérateurs en C++).
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.