Wie funktioniert die Definition der [eckigen Klammer] in Ruby?
This question and all comments follow the
"Attribution Required."
Ähnliche Probleme
- Definieren einer Methode in einem Modul in Ruby (NoMethodError)
- methods - Wie funktioniert der Operator von Ruby. ()?
- ruby on rails - Definieren Sie die Methode für die Aktivaufzeichnungsbeziehung
- metaprogramming - Dynamisches Definieren von Klassenmethoden in Ruby
- syntax - Methode in Ruby mit gleich definieren
- Weitere ähnliche Fragen >>
Alle Antworten
Methoden in Ruby können im Gegensatz zu vielen Sprachen einige Sonderzeichen enthalten. Eine davon ist die Array-Lookup-Syntax.
Wenn Sie Ihre eigene Hash-Klasse implementieren, in der Sie beim Abrufen eines Elements in Ihrem Hash Folgendes rückgängig machen möchten, können Sie Folgendes tun:
Sie können dies beweisen, indem Sie einen Hash wie folgt aufrufen:
Das def [] hat also die Methode definiert, die verwendet wird, wenn Sie dies tun
my_array["key"]
Andere Methoden, die für Sie seltsam aussehen können, sind:Nur um zu verdeutlichen, die Definition von a
[]
Methode ist nicht mit Arrays oder Hashes verbunden. Nehmen Sie das folgende (erfundene) Beispiel:Es ist nur syntaktischer Zucker. Es gibt bestimmte Syntaxmuster, die in Nachrichtensendungen übersetzt werden. Speziell
ist das gleiche wie
und das gleiche gilt für
==
,!=
,<
,>
,<=
,>=
,<=>
,===
,&
,|
,*
,/
,-
,%
,**
,>>
,<<
,!==
,=~
und!~
auch.Ebenfalls,
ist das gleiche wie
und das gleiche gilt für
~
.Dann,
ist das gleiche wie
und das gleiche gilt für
-
.Plus,
ist das gleiche wie
Es gibt auch eine spezielle Syntax für Setter:
ist das gleiche wie
Und zu guter Letzt gibt es eine spezielle Syntax für die Indizierung:
ist das gleiche wie
und
ist das gleiche wie
Die eckigen Klammern sind wie der Methodenname
Array#size
du hastArray#[]
als Methode und Sie können es sogar wie jede andere Methode verwenden:Der letzte ist so etwas wie syntaktischer Zucker und macht genau das gleiche wie der erste. Das
Array#+
Arbeit ähnlich:Sie können sogar Zahlen wie diese hinzufügen:
das gleiche funktioniert mit
/
,*
,-
und viele mehr.Es ist ein Operator-Overlader, der das Verhalten einer Methode innerhalb einer von Ihnen definierten Klasse oder einer Klasse, deren Verhalten Sie ändern, überschreibt oder ergänzt. Sie können dies auch für andere Operatoren als [] tun. In diesem Fall ändern Sie das Verhalten von [], wenn es für Instanzen der Klasse SongList aufgerufen wird.
Wenn Sie songlist = SongList.new haben und dann songlist ["foobar"] ausführen, wird Ihre benutzerdefinierte Definition in Betrieb genommen und es wird davon ausgegangen, dass "foobar" als Parameter (Schlüssel) übergeben werden soll und "foobar" "Was auch immer die Methode sagt, sollte zum Schlüssel gemacht werden.
Versuchen
Leave a Reply