Was ist ein Block?
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 15 von 56.
Du hast bereits Blöcke geschrieben. Jedes Mal, wenn du each do |x| ... end geschrieben hast, war der Teil zwischen do und end ein Block: ein Stück Code, das an eine Methode übergeben wurde.
[1, 2, 3].each do |n|
puts n * 2
endHier ist each eine Methode auf dem Array, und do |n| ... end ist der Block. each führt den Block einmal für jedes Element aus und übergibt es als n.
Blöcke sind keine separaten Objekte, die man in Variablen speichert; sie sind direkt an den Methodenaufruf gebunden. Eine Methode erhält entweder einen Block oder nicht, und die meisten Iterationsmethoden (each, map, select, times) sind darauf ausgelegt, einen entgegenzunehmen.
3.times do |i|
puts "hi #{i}"
endDas Aufrufen einer Methode ohne ihren Block ändert ihre Funktionsweise. [1,2,3].map ohne Block gibt einen Enumerator anstelle eines transformierten Arrays zurück, daher ist der Block Teil dessen, was die Methode bedeutet.
Aufgabe
AnfängerLies eine Ganzzahl n von der Eingabe. Verwende die times-Methode mit einem Block, um die Nachricht Iteration <i> für jeden Wert von i von 0 bis n - 1 auszugeben.
Für die Eingabe 3 ist die Ausgabe:
Iteration 0
Iteration 1
Iteration 2Spickzettel
Ein Block ist ein Stück Code, das an eine Methode zwischen do |param| ... end übergeben wird:
[1, 2, 3].each do |n|
puts n * 2
endVerwenden Sie times, um einen Block n Mal zu wiederholen, wobei i von 0 bis n - 1 läuft:
3.times do |i|
puts "hi #{i}"
endProbier 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
String-Methoden im ÜberblickString-InterpolationIterieren über StringsSplit und JoinRückblick – String Weaver4Blöcke, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas yield-SchlüsselwortBlock-ParameterProcs und LambdasZusammenfassung – Eigener Iterator7Hashes Teil 2
Hash.new mit StandardwertenIterieren über HashesVerschachtelte HashesZusammenführen und TransformierenRückblick – Häufigkeitszähler10Projekt - Studentenverwaltung
ProjektübersichtStudent hinzufügen5Enumerable-Kraftpaket
Select und RejectMap-VerkettungReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Data Pipeline8Fortgeschrittene Entscheidungslogik
Case mit Klassen & RegexMulti-Value whenTernärer OperatorInline if / unlessRückblick – Noten-Klassifizierer