Was ist ein Block?
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy. Lektion 15 von 56.
Du hast bereits block geschrieben. Jedes Mal, wenn du each do |x| ... end geschrieben hast, war der Teil zwischen do und end ein block: ein Codeabschnitt, der an eine Methode übergeben wurde.
[1, 2, 3].each do |n|
puts n * 2
endHier ist each eine Methode des Arrays, und do |n| ... end ist der block. each führt den block einmal für jedes Element aus und übergibt es als n.
block sind keine separaten Objekte, die du in Variablen speicherst, sondern sie sind direkt an den Methodenaufruf gebunden. Eine Methode bekommt entweder einen block oder nicht, und die meisten Iterationsmethoden (each, map, select, times) sind dafür ausgelegt, einen zu übernehmen.
3.times do |i|
puts "hi #{i}"
endDas Aufrufen einer Methode ohne ihren Block verändert, was sie tut. [1,2,3].map ohne Block gibt einen Enumerator statt eines transformierten Arrays zurück, daher ist der Block Teil von der Bedeutung der Methode.
Aufgabe
AnfängerLies eine Ganzzahl n aus der Eingabe. Verwende die times-Methode mit einem Block, um für jeden Wert von i von 0 bis n - 1 die Nachricht Iteration <i> auszugeben.
Für die Eingabe 3 lautet die Ausgabe:
Iteration 0
Iteration 1
Iteration 2Probier es selbst
n = gets.to_i
# TODO: verwende n.times mit einem Block, um jede Iteration auszugeben
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Programmfluss
1Strings im Detail
Überblick über String-MethodenString-InterpolationStrings durchlaufenSplitten und VerbindenRückblick – String Weaver4Blocks, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas Schlüsselwort yieldBlock-ParameterProcs und LambdasRückblick – Benutzerdefinierter Iterator2Bereiche
Was ist ein Bereich?BereichsmethodenBereiche in Case / WhenWiederholung – Übung zu Bereichen5Das Enumerable-Kraftpaket
Select und RejectMap verkettenReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Datenpipeline8Fortgeschrittene Entscheidungsfindung
Case mit Klassen & Regexwhen mit mehreren WertenTernärer OperatorInline-if / unlessRückblick – NotenklassifiziererÜbe selbstständig: Online-Ruby-Compiler