Repetition av block
Skicka block till metoder.
Repetition av block är en gratis lektion i Ruby Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Ruby Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Ruby Academy innehåller totalt 4 lektioner.
Skicka block till metoder
Ett block är en koddel som ni skickar till en metod. Många Ruby-metoder, till exempel each, tar emot ett block och kör det åt er. Block är grunden för Rubys uttrycksfulla stil.
[1, 2, 3].each do |n|
puts n * 10
endTvå blocksyntaxer
Använd do ... end för block över flera rader och klamrar { } för korta enradsuttryck. De fungerar på samma sätt.
[1, 2, 3].each { |n| puts n }Blockparametrar
Namnen mellan pipe-tecknen | | är blockets parametrar. Metoden bestämmer vad som skickas till dem.
{ a: 1, b: 2 }.each do |key, value|
puts "#{key} = #{value}"
endyield anropar blocket
Inuti en metod kör yield det block som skickades med. Ni behöver inte deklarera blocket i parameterlistan för att använda yield.
def twice
yield
yield
end
twice { puts "Hi" }yield med argument
Skicka värden till blocket genom yield. De hamnar i blockets parametrar.
def greet_each(names)
names.each { |n| yield n }
end
greet_each(["Ann", "Bo"]) { |name| puts "Hello #{name}" }block_given?
Om ni anropar yield utan något block uppstår ett fel. Kontrollera först med block_given? för att göra blocket valfritt.
def maybe
if block_given?
yield
else
puts "No block provided"
end
end
maybe
maybe { puts "Block ran" }Block returnerar värden
Ett block utvärderas till sitt sista uttryck. Metoder som map samlar dessa returvärden i en ny array.
squares = [1, 2, 3, 4].map { |n| n * n }
p squaresVärdet av yield
yield returnerar självt blockets värde, så att en metod kan omvandla indata genom ett block som anroparen tillhandahåller.
def transform(x)
yield x
end
result = transform(5) { |n| n + 100 }
puts resultFånga ett block med &
Prefixa den sista parametern med & för att fånga blocket som ett Proc-objekt som ni kan lagra eller skicka vidare.
def run(&block)
block.call
end
run { puts "Called via block.call" }Numrerade parametrar
Med moderna versioner av Ruby kan Ni utelämna namnet på en enskild blockparameter genom att använda _1 (eller it i Ruby 3.4+). Praktiskt för små block.
[10, 20, 30].each { puts _1 }Så hänger det ihop
Block låter metoder ta emot beteende:
do...endeller{ }skickar med ett block.yieldkör det, ochblock_given?kontrollerar om det finns.&blockomvandlar det till ett återanvändbart objekt.
def repeat(times)
return unless block_given?
times.times { |i| yield i }
end
repeat(3) { |i| puts "Step #{i}" }Snabbtest
Testa er förståelse av block.
Sammanfattning
Ni har gått igenom block:
- Block skickar beteende till metoder via
do...endeller{ }. yieldkör blocket och returnerar dess värde.block_given?gör block valfria.&blockfångar ett block som en Proc.
def wrap
puts "<<"
yield
puts ">>"
end
wrap { puts "content" }Lär dig Ruby med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 29
- Lektioner
- 109
Vanliga frågor
Är lektionen ”Repetition av block” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Ruby Academy, inklusive ”Repetition av block”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Ruby Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Repetition av block”?
Skicka block till metoder. Ni övar på Ruby Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Ruby Academy?
Du behöver inga förkunskaper. Utbildningen i Ruby Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Repetition av block”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Ruby Academy-lektionen?
Ja. Varje Ruby Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Repetition av block
- Procs
- Lambdas
- Closures och räckvidd