Ruby Academy · Lektion

Repetition av block

Skicka block till metoder.

Lektion 1 av 413 steg

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
end

Två 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}"
end

yield 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 squares

Vä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 result

Få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...end eller { } skickar med ett block.
  • yield kör det, och block_given? kontrollerar om det finns.
  • &block omvandlar 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...end eller { }.
  • yield kör blocket och returnerar dess värde.
  • block_given? gör block valfria.
  • &block fångar ett block som en Proc.
def wrap
  puts "<<"
  yield
  puts ">>"
end
wrap { puts "content" }
Gratis att börja

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

  1. Repetition av block
  2. Procs
  3. Lambdas
  4. Closures och räckvidd
← Tillbaka till Ruby Academy