Ich stoße in Ruby auf die eckige Klammer []
syntax, aber es scheint nie dasselbe zu tun. Kann jemand alle die verschiedenen Verwendungen für die eckigen Klammern []
in Ruby auflisten, damit mein Verstand dieses scheinbar unendlich vielseitige kleine Symbol in den Griff bekommen kann? (Wie ist es möglich, dass ein Symbol so viel tun kann, ohne dass der Ruby-Interpreter verwirrt wird?)
Beispiele:
[]
und []=
Methoden %q[...]
[1,2,3][0]
hash["a"] = 3
ary = []
/[^A-Fa-f0-9]/
"Is a string"[5,3]
Okay, nur für meine eigenen Notizen bin ich gegangen und habe mir das näher angeschaut und, aufbauend auf Holger Just's Antwort , kommen Sie auf Folgendes: Die Verwendung von eckigen Klammern in Ruby kann in 6 Verwendungen unterteilt werden, von denen 3 ein Teil der Methodendefinitionen von Ruby und 3 davon semantische Konstrukte sind.
Methodendefinition
Objekterstellung über Klassenmethoden Array :: [], Hash :: []
%Vor%Nichts mit literalen Konstruktoren zu tun, obwohl es dasselbe tut.
Elementverweis über Instanzmethoden Array # [], Bignum # [], Fortsetzung # [], Fixnum # [], Hash # [], MatchData # [], Method # [], Proc # [] , String # [], Struct # [], Symbol # [], Thread # [] und Klassenmethoden Dir :: [], ENV :: []
%Vor%Elementzuweisung über Instanzmethoden Array # [] =, Hash # [] =, String # [] =, Struct # [] =, Thread # [] =, und Klassenmethode ENV :: [] =
%Vor%Semantische Konstrukte
Objekterstellung über den Array-Literalkonstruktor
%Vor% Es gibt eine Reihe von Literalkonstruktoren in Ruby, die ein Objekt der relevanten Klasse über (normalerweise) ein einfaches Symbolpaar erzeugen, wobei eckige Klammern der Literalkonstruktor für Array-Objekte sind: Array []
, Hash {}
, Proc ->(){}
, Bereich ..
und ...
, Regexp //
, String ""
und ''
, Symbol% co_de% und :
.
Objekterstellung über die% Notation
%Vor% Es handelt sich streng genommen nicht um eine Square-Bracket-Notation, sondern um eine Zwei-Zeichen-Paar-Notation, bei der Sie, wenn Sie möchten, eckige Klammern verwenden können. Also ist :""
gleichermaßen gültig.
Ruby's reguläre Ausdrücke
%Vor%Eckige Klammern kennzeichnen Zeichenklassen in regulären Ruby-Ausdrücken.
Ich habe eine andere Verwendung von %q@hello there you@
gefunden, als ein Muster für die Dir :: glob-Methode, aber es soll genauso funktionieren wie in regulären Ausdrücken. Dennoch deutet es darauf hin, dass möglicherweise mehr Verwendungen in Rubys 1500+ Methoden versteckt sind.
Die eckigen Klammern stehen in zwei strikten und einem optionalen Kontext:
Definieren von Arrays
Arrays, d. H. Eine Datenstruktur, die eine geordnete Liste von Elementen bereitstellt, können im Code unter Verwendung einer Syntax wie [1,2,3]
spezifiziert werden. Dies erzeugt ein Array mit den drei Elementen 1
, 2
und 3
in genau dieser Reihenfolge. Sie können dann mit den Iterator-Funktionen wie each
oder map
über das Array iterieren oder Sie können direkt auf bestimmte Elemente mit der Index-ID zugreifen, wie unten gezeigt.
Zugreifen auf Elemente in Arrays und Hashes
Hashes (in anderen Sprachen auch hashmaps, Dictionaries oder assoziative Arrays genannt) enthalten Elemente, die Arrays ähneln. Die unterscheiden sich davon in der Art, wie sie ihre Daten unbestellt speichern . Auf die Daten wird nicht wie bei Arrays, sondern mit einem beliebigen Schlüssel (üblicherweise ein Symbol oder eine Zeichenfolge) durch eine Integer-ID zugegriffen. Dies unterscheidet sich von z.B. PHP, wo für beide der gleiche Array-Typ verwendet wird.
Dieser Zugriff auf die Daten wird durch die Methoden []
und []=
für Hashes und Arrays erleichtert.
Dies ist der übliche Anwendungsfall für die Klammern. In Ruby-Code sehen Sie manchmal andere Klassen, die die Klammerfunktionen implementieren. Sie tun dies, um einen ähnlichen Zugriff wie Arrays oder Hashes zu ermöglichen, und es wird dann allgemein erwartet, dass sich diese Klassen ähnlich verhalten, aber dies wird in keiner Weise erzwungen. Siehe auch Duck Typing .
% Notation
Ruby hat eine dritte Syntax, um Strings (und andere Objekte) zu erstellen, außer dem Common. Mit dieser Syntax wird die literale Zeichenfolge im Code nicht von "
oder '
eingeschlossen, sondern mit einem speziellen Trennzeichen. Es beginnt mit einem Prozentzeichen, einem einzelnen Zeichen, das das zu erstellende Objekt angibt, und fast jedem Zeichen, das als Trennzeichen ausgewählt werden soll:
In allen drei Beispielen wird das gleiche Array erstellt. In der Dokumentation erfahren Sie, wie Sie diese Syntax verwenden und welche anderen Modifier-Zeichen verfügbar sind in Ruby.
Obwohl Klammern hier üblich sind, sind sie in keiner Weise erforderlich und können bei Bedarf ersetzt werden. Es ist hier nur ein Hinweis, da die gebräuchlichste Verwendung dieser Notation darin besteht, ein Array von Elementen aus einer whitespace-getrennten Zeichenfolge (wie oben gezeigt) zu erzeugen. Daher macht die Verwendung von Klammern deutlich, dass ein Array zurückgegeben wird, da die Syntax der grundlegenden Array-Spezifikation ähnelt.