Repetisjon av blokker
Send blokker til metoder
Repetisjon av blokker er en gratis leksjon i Ruby Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Ruby Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Ruby Academy inneholder totalt 4 leksjoner.
Sende blokker til metoder
En blokk er en del kode du sender til en metode. Mange Ruby-metoder, som each, tar imot en blokk og kjører den på dine vegne. Blokker er grunnlaget for Rubys uttrykksfulle stil.
[1, 2, 3].each do |n|
puts n * 10
endTo syntakser for blokker
Bruk do ... end for blokker over flere linjer og krøllparenteser { } for korte énlinjers uttrykk. De oppfører seg på samme måte.
[1, 2, 3].each { |n| puts n }Blokkparametere
Navnene mellom pipe-tegnene | | er blokkens parametere. Metoden bestemmer hva som sendes inn i dem.
{ a: 1, b: 2 }.each do |key, value|
puts "#{key} = #{value}"
endyield kaller blokken
Inne i en metode kjører yield blokken som ble sendt inn. Du trenger ikke deklarere blokken i parameterlisten for å bruke yield.
def twice
yield
yield
end
twice { puts "Hi" }yield med argumenter
Send verdier til blokken gjennom yield. De havner i blokkens parametere.
def greet_each(names)
names.each { |n| yield n }
end
greet_each(["Ann", "Bo"]) { |name| puts "Hello #{name}" }block_given?
Hvis du kaller yield uten en blokk, oppstår det en feil. Sjekk først med block_given? for å gjøre blokken valgfri.
def maybe
if block_given?
yield
else
puts "No block provided"
end
end
maybe
maybe { puts "Block ran" }Blokker returnerer verdier
En blokk evalueres til sitt siste uttrykk. Metoder som map samler disse returverdiene i et nytt array.
squares = [1, 2, 3, 4].map { |n| n * n }
p squaresVerdien til yield
yield returnerer selv blokkens verdi, slik at en metode kan transformere inndata gjennom en blokk levert av den som kaller metoden.
def transform(x)
yield x
end
result = transform(5) { |n| n + 100 }
puts resultFange en blokk med &
Sett & foran den siste parameteren for å fange blokken som et Proc-objekt du kan lagre eller sende videre.
def run(&block)
block.call
end
run { puts "Called via block.call" }Nummererte parametere
Moderne Ruby lar deg utelate navnet på én enkelt blokkparameter ved å bruke _1 (eller it i Ruby 3.4+). Praktisk for korte blokker.
[10, 20, 30].each { puts _1 }Samlet oversikt
Blokker lar metoder ta imot oppførsel:
do...endeller{ }leverer en blokk.yieldkjører den;block_given?sjekker om den finnes.&blockgjør den om til et gjenbrukbart objekt.
def repeat(times)
return unless block_given?
times.times { |i| yield i }
end
repeat(3) { |i| puts "Step #{i}" }Sjekk forståelsen
Test forståelsen din av blokker.
Oppsummering
Du har gått gjennom blokker:
- Blokker overfører oppførsel til metoder via
do...endeller{ }. yieldkjører blokken og returnerer verdien.block_given?gjør blokker valgfrie.&blockfanger opp en blokk som en Proc.
def wrap
puts "<<"
yield
puts ">>"
end
wrap { puts "content" }Lær deg Ruby med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 29
- Leksjoner
- 109
Ofte stilte spørsmål
Er leksjonen «Repetisjon av blokker» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Ruby Academy, inkludert «Repetisjon av blokker», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Ruby Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Repetisjon av blokker»?
Send blokker til metoder Du øver på Ruby Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Ruby Academy?
Ingen tidligere erfaring er nødvendig. Ruby Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Repetisjon av blokker»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Ruby Academy-leksjonen?
Ja. Alle Ruby Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Repetisjon av blokker
- Procs
- Lambdas
- Closures og scope