Block-Parameter
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 18 von 56.
Die Variablen zwischen den Pipes, |x|, |x, y|, sind die Blockparameter. Sie benennen die Werte, die die Methode an den Block übergibt.
Einige Methoden übergeben einen Wert, andere übergeben mehrere. each übergibt jeweils ein Element:
[10, 20, 30].each { |n| puts n }each_with_index übergibt zwei Werte: das Element und seinen Index:
["a", "b", "c"].each_with_index do |letter, i|
puts "#{i}: #{letter}"
end
# 0: a
# 1: b
# 2: cBeim Iterieren über einen Hash sind die Blockparameter key und value:
{ a: 1, b: 2 }.each do |key, value|
puts "#{key} = #{value}"
endDie Anzahl und Reihenfolge der Blockparameter hängt davon ab, was die Methode liefert. Im Zweifelsfall schlagen Sie in der Dokumentation nach oder probieren Sie einen Parameter aus, um zu sehen, was Sie erhalten.
Aufgabe
EinfachDas Hash scores ist gegeben. Iteriere darüber mit each_with_index in seiner to_a-Form, sodass du Zugriff auf sowohl das (name, points) Paar als auch dessen Position hast. Gib pro Eintrag eine Zeile in diesem Format aus:
<rank>. <name> - <points>Wobei rank bei 1 beginnt (nicht 0).
Für das Standard-Hash ist die Ausgabe:
1. Alice - 90
2. Bob - 85
3. Cara - 78Spickzettel
Block-Parameter werden zwischen Pipes |...| geschrieben und erhalten Werte, die von der Methode übergeben werden:
# each – ein Parameter
[10, 20, 30].each { |n| puts n }
# each_with_index – Element und Index
["a", "b", "c"].each_with_index do |letter, i|
puts "#{i}: #{letter}"
end
# hash each – Schlüssel und Wert
{ a: 1, b: 2 }.each do |key, value|
puts "#{key} = #{value}"
endhash.to_a konvertiert einen Hash in ein Array von [key, value]-Paaren, was nützlich für each_with_index ist:
{ a: 1, b: 2 }.to_a.each_with_index do |(key, value), i|
puts "#{i}: #{key} = #{value}"
endProbier es selbst
scores = { "Alice" => 90, "Bob" => 85, "Cara" => 78 }
# TODO: "<Rang>. <Name> - <Punkte>" für jeden Eintrag ausgeben, Rang beginnt bei 1
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