Comment fonctionne la définition de la méthode [crochet] dans Ruby?
This question and all comments follow the
"Attribution Required."
Problèmes similaires
- Définition d'une méthode à l'intérieur d'un module dans ruby (NoMethodError)
- methods - Comment fonctionne l'opérateur Ruby's. ()?
- ruby on rails - Définir la méthode sur la relation activerecord
- metaprogramming - Définition dynamique des méthodes de classe dans Ruby
- syntax - Définition d'une méthode en Ruby avec des égaux
- Plus de questions similaires >>
Toutes les réponses
Les méthodes en ruby, contrairement à de nombreuses langues, peuvent contenir des caractères spéciaux. L'une d'elles est la syntaxe de recherche de tableau.
Si vous deviez implémenter votre propre classe de hachage où, lors de la récupération d'un élément de votre hachage, vous vouliez l'inverser, vous pouvez effectuer les opérations suivantes:
Vous pouvez le prouver en appelant un hachage avec ce qui suit:
Ainsi, le def [] a défini la méthode qui est utilisée lorsque vous faites
my_array["key"]
D'autres méthodes qui peuvent vous sembler étranges sont:Juste pour clarifier, la définition d'un
[]
n'est pas liée aux tableaux ou aux hachages. Prenons l'exemple suivant (artificiel):C'est juste du sucre syntaxique. Il existe certains modèles de syntaxe qui sont traduits en envois de messages. En particulier
est le même que
et il en va de même pour
==
,!=
,<
,>
,<=
,>=
,<=>
,===
,&
,|
,*
,/
,-
,%
,**
,>>
,<<
,!==
,=~
et!~
ainsi que.Également,
est le même que
et il en va de même pour
~
.Ensuite,
est le même que
et il en va de même pour
-
.Plus,
est le même que
Il existe également une syntaxe spéciale pour les setters:
est le même que
Enfin, il existe une syntaxe spéciale pour l'indexation:
est le même que
et
est le même que
les crochets sont le nom de la méthode comme
Array#size
vous avezArray#[]
comme méthode et vous pouvez même l'utiliser comme n'importe quelle autre méthode:le dernier est quelque chose comme le sucre syntaxique et fait exactement la même chose que le premier. le
Array#+
travail similaire:Vous pouvez même ajouter des nombres comme celui-ci:
la même chose fonctionne avec
/
,*
,-
et beaucoup plus.C'est un surchargeur d'opérateurs, il remplace ou complète le comportement d'une méthode à l'intérieur d'une classe que vous avez définie, ou d'une classe dont vous modifiez le comportement. Vous pouvez le faire à d'autres opérateurs différents de []. Dans ce cas, vous modifiez le comportement de [] lorsqu'il est appelé sur une instance de la classe SongList.
Si vous avez songlist = SongList.new et que vous faites songlist ["foobar"] alors votre définition personnalisée entrera en vigueur et supposera que "foobar" doit être passé comme paramètre (clé) et il le fera pour "foobar "tout ce que la méthode dit doit être fait pour la clé.
Essayer
Leave a Reply