Scope Gates in Ruby: Teil I

Mehdi Farsi

Follow

Sep 2, 2019 – 3 min read

In diesem Artikel werden wir uns mit den folgenden Themen beschäftigen:

  • Methodenumfang
  • Klassenumfang

Vor dem Start

Ich freue mich sehr, Ihnen unser neuestes Projekt vorzustellen: Wissenswertes über Ruby – Band 1

Bitte verbreiten Sie diesen Beitrag und teilen Sie ihn! 🙏

Danke für deine Zeit!

In Ruby ist der Umfang eines Programms stark mit dem Wert von self korreliert.

Hier werden wir detailliert beschreiben, welche Werte self hat, wenn wir uns in einer Methode, einer Klasse und im Top-Level-Bereich befinden.

Methodenbereich

In Ruby ist der Top-Level-Bereich der Kontext des main-Objekts.

In diesem Moment bezieht sich self auf das main-Objekt.

Lesen Sie ruhig den Artikel Ruby Object Model, wenn Sie das main-Objekt nicht kennen.

Was ist nun der Kontext von self innerhalb einer Methode, die im Top-Level-Bereich definiert ist?

Hier sehen wir, dass sich self auch auf das main-Objekt bezieht.

Der einzige Unterschied ist, dass wir innerhalb unserer Methode keinen Zugriff auf lokale Variablen haben, die im Top-Level-Bereich deklariert sind.

Das liegt daran, dass das def-Schlüsselwort den Inhalt der Methode in einen völlig isolierten Bereich einbettet.

Dagegen kann unsere Methode auf Instanzvariablen zugreifen, die im Top-Level-Bereich deklariert sind.

Da Instanzvariablen auf Objektebene deklariert werden, können wir auf diese Variablen in einem anderen Bereich zugreifen, in dem self auf dasselbe Objekt verweist – in unserem Fall auf das Objekt main.

Da self also sowohl im Top-Level-Bereich als auch in der im Top-Level-Bereich definierten Methode auf main verweist, können wir in der Methode hello auf die Instanzvariable @instance_variable zugreifen.

Klassenbereich

Wenn wir das Schlüsselwort class verwenden:

  • Der Wert von self ändert sich
  • Der Inhalt der Klasse wird in einen isolierten Bereich eingebettet

Schauen wir uns das folgende Beispiel an

Hier sehen wir, dass in unserer Klasse self einen anderen Wert hat – er bezieht sich auf die Klasse Hello.

Auch haben wir keinen Zugriff auf Variablen und Methoden, die außerhalb der Klasse definiert sind.

Beachten Sie, dass wir aus denselben Gründen, die im ersten Teil des Artikels beschrieben wurden, Zugriff auf Instanzvariablen in Instanzmethoden haben.

Im Teil II & III werden wir mit Geltungsbereichen spielen, indem wir Module, verschachtelte Klassen und Blöcke (FLAT SCOPES) verwenden.

Voilà !

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.