Next Previous Contents

22. <3.3.2>: Yield og blokker.

En blokk er en kodebit, som kan motta argumenter og returnere en verdi. Der slutter likhetene med en metode.

En blokk holder også tak i den omliggende konteksten og bindingen. Det betyr at lokale variable er tilgjengelig i blokk-koden, noe som gjør den perfekt til callback, f.eks. i grafiske brukergrensesnitt.

  1| # En enkel, naiv iterator metode.
  2| def tell_fingre
  3|   yield "Tommel"
  4|   yield "Peke"
  5|   yield "Lange"
  6|   yield "Ringe"
  7|   yield "Lille"
  8| end
  9| 
 10| # Blocken har tilgang til lokale variabler.
 11| postfix = "finger..."
 12| 
 13| # Vi sender med en block når vi kaller iterator-metoden.
 14| tell_fingre do |finger|
 15|   puts finger + postfix
 16| end

En blokk er ikke et objekt av effektivitetshensyn, men kan innkapsles i et Proc-objekt. (Via Proc.new, nøkkelordene proc og lambda, eller via bruk av &-prefikset i argumentlista til metodedefinisjonen)


Next Previous Contents