|
Du bist hier:
Hinterkattentuffel -
Ruby -
Aus Schleifen ausbrechen Prev: Anonym und dynamisch: Blöcke |
|
Es gibt eine Reihe von Möglichkeiten, aus einem Block heraus den aufrufenden Programmfluß zu beeinflussen. Die Standard-Variante ist ein break. Damit springt man aus der Methode, die den Block aufruft. Noch weiter springt man mit einem in den Block codierten return oder einer Exception. Wer einen Block aufruft, muss also damit rechnen, dass der Code nach dem Block nicht mehr erreicht wird. Es gibt jedoch einen Mechanismus, um Aufräumarbeiten unterzubringen:
begin
aCollection.each do
block.call
end
ensure
[...]
end
Der Teil im ensure wird auf jeden Fall aufgerufen, egal, was in block.call passiert. Ausgenommen sind lediglich Systemabbrüche, oder -abstürze. Das Programm break.rb.txt zeigt die drei Varianten, aus einer Schleife auszubrechen. In test1 wird break verwendet, test2 verwendet ein return. Für test3 wird zunächst eine neue Exception als Unterklasse von StandardError definiert. Diese wird mit raise geschmissen und mit rescue gefangen. Hier die Ausgabe des Programms: CMD> ruby break.rb test 1, Iteration 1: Vor block.call test 1, Iteration 1: Nach block.call test 1, Iteration 2: Vor block.call test 1: In ensure test 1: end test 2, Iteration 1: Vor block.call test 2, Iteration 1: Nach block.call test 2, Iteration 2: Vor block.call test 2: In ensure test 3, Iteration 1: Vor block.call test 3, Iteration 1: Nach block.call test 3, Iteration 2: Vor block.call test 3: In ensure test 3: rescue LoopInterrupt test 3: end Wie man sieht, wird das ensure in allen drei Tests durchlaufen. Das return verlässt sowohl den Block als auch die Methode test2. Mit der Exception LoopInterrupt könnte man sogar noch weiter "springen". Ohne ein entsprechendes rescue würde sogar das Programm abbgebrochen. |
| Next: RubyGems, der Ruby Paketmanager |