Ruby Block

Du weißt bereits, wie Ruby Methoden definiert und wie du Methoden aufrufst. Ähnlich verfügt Ruby über das Konzept von Blöcken.

  • Ein Block besteht aus Codestücken.
  • Du musst einem Block einen Namen geben.
  • Der Code im Block ist immer von geschweiften Klammern {} umschlossen.
  • Blöcke werden immer von Funktionen mit demselben Namen aufgerufen. Das bedeutet, wenn dein Blocknametestlautet, dann würdest du die Funktiontestverwenden, um diesen Block aufzurufen.
  • Du kannst dieyieldAnweisung verwenden, um einen Block aufzurufen.

Syntax

block_name{ statement1 statement2 .......... }

Hier lernst du, wie du eine einfacheyieldAnweisung verwendest, um einen Block aufzurufen. Du lernst auch, wie du eineyieldAnweisung mit Parametern verwendest, um einen Block aufzurufen. In den Beispielen siehst du diese beiden Arten vonyieldAnweisungen verwendet werden kann.

yieldAnweisungen

Schauen wir uns ein Beispiel für eine yield-Anweisung an:

Beispiel

#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test puts "Innerhalb der test-Methode" yield puts "Du bist wieder in der Testmethode" yield end test {puts "Du bist innerhalb des Blocks"}

Ausprobieren »

Die Ausgabe des obigen Beispiels ist:

在 test 方法内
你在块内
你又回到了 test 方法内
你在块内

Du kannst auch eine yield-Anweisung mit Parametern übergeben. Hier ist ein Beispiel:

Beispiel

#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test yield 5 puts "Innerhalb der Testmethode" yield 100 end test {|i| puts "Du bist innerhalb von Block #{i}"}

Ausprobieren »

Die Ausgabe des obigen Beispiels ist:

你在块 5 内
在 test 方法内
你在块 100 内

Hier,yieldwird die Anweisung von Parametern gefolgt. Du kannst sogar mehrere Parameter übergeben. Im Block kannst du eine Variable zwischen zwei senkrechten Strichen platzieren, um Parameter zu empfangen. Daher übergibt im obigen Code die Anweisung yield 5 den Wert 5 als Parameter an den Testblock.

Betrachte nun die folgende Anweisung:

test {|i| puts "Du bist innerhalb von Block #{i}"}

Hier wird der Wert 5 in der Variablen i empfangen. Betrachte nun die folgende puts-Anweisung:

puts "Du bist innerhalb von Block #{i}"

Die Ausgabe dieser puts-Anweisung ist:

Du bist im Block5innen

Wenn du mehrere Parameter übergeben möchtest, dann sieht dieyield-Anweisung wie folgt aus:

yield a, b

An diesem Punkt sieht der Block wie folgt aus:

test {|a, b| -Anweisung}

Die Parameter werden durch Kommas getrennt.

Blöcke und Methoden

Du hast gesehen, wie Blöcke und Methoden miteinander zusammenhängen. Du verwendest normalerweise die yield-Anweisung, um einen Block aus einer Methode mit demselben Namen aufzurufen. Der Code sieht daher wie folgt aus:

Beispiel

#!/usr/bin/ruby def test yield end test{ puts "Hello world"}

Dieses Beispiel ist die einfachste Möglichkeit, einen Block zu implementieren. Du verwendest dieyield-Anweisung, um den test-Block aufzurufen.

Wenn jedoch dem letzten Parameter einer Methode ein & vorangestellt ist, kannst du einen Block an diese Methode übergeben, und dieser Block kann dem letzten Parameter zugewiesen werden. Wenn * und & zusammen in der Parameterliste vorkommen, sollte & dahinter platziert werden.

Beispiel

#!/usr/bin/ruby def test(&block) block.call end test { puts "Hello World!"}

Ausprobieren »

Die Ausgabe des obigen Beispiels ist:

Hello World!

BEGIN- und END-Blöcke

Jede Ruby-Quelldatei kann einen Codeblock deklarieren, der ausgeführt wird, wenn die Datei geladen wird (einen BEGIN-Block), und einen Codeblock, der ausgeführt wird, nachdem das Programm die Ausführung beendet hat (einen END-Block).

Beispiel

#!/usr/bin/ruby BEGIN { #BEGIN-Codeblock puts "BEGIN-Codeblock" } END { #END-Codeblock puts "END-Codeblock" } #MAIN-Codeblock puts "MAIN-Codeblock"

Ein Programm kann mehrere BEGIN- und END-Blöcke enthalten. BEGIN-Blöcke werden in der Reihenfolge ausgeführt, in der sie erscheinen. END-Blöcke werden in umgekehrter Reihenfolge ausgeführt, in der sie erscheinen. Bei der Ausführung gibt das obige Programm das folgende Ergebnis aus:

BEGIN 代码块
MAIN 代码块
END 代码块
Andere Erweiterungen