Skrive egen each
Implementer iterasjon
Skrive egen each 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.
Implementer iterasjon
Iterasjon i Ruby dreier seg om én metode: each. Ved å skrive din egen each bestemmer du hvordan en samling gjennomgås, og får tilgang til hele økosystemet for iterasjon.
class Trio
def each
yield 1
yield 2
yield 3
end
end
Trio.new.each { |n| puts n }each gir verdier
Inne i each kaller du yield én gang per element. Blokken som den som kaller metoden, oppgir, mottar hver verdi etter tur.
class Days
NAMES = ["Mon", "Tue", "Wed"]
def each
NAMES.each { |d| yield d }
end
end
Days.new.each { |day| puts day }Lagre interne data
Vanligvis går each gjennom data som ligger i en instansvariabel.
class Stack
def initialize
@items = []
end
def push(x); @items << x; self; end
def each
@items.each { |i| yield i }
end
end
s = Stack.new
s.push(10).push(20)
s.each { |x| puts x }Egendefinert gjennomløpsrekkefølge
Din each kan iterere i den rekkefølgen du ønsker, for eksempel i omvendt rekkefølge.
class Reversed
def initialize(arr); @arr = arr; end
def each
i = @arr.length - 1
while i >= 0
yield @arr[i]
i -= 1
end
end
end
Reversed.new([1, 2, 3]).each { |x| puts x }Gi flere verdier
yield kan sende mer enn én verdi, som blokken mottar som flere parametere, for eksempel nøkkelen og verdien i en hash.
class Pairs
def each
yield :a, 1
yield :b, 2
end
end
Pairs.new.each { |key, value| puts "#{key}=#{value}" }each returnerer self
Etter konvensjonen returnerer each selve samlingen, slik at kall kan lenkes. Når each returnerer self, samsvarer det med oppførselen til innebygde metoder.
class Box
def initialize(*x); @x = x; end
def each
@x.each { |i| yield i }
self
end
end
result = Box.new(1, 2).each { |i| }
puts result.classBruk av block_given?
Beskytt koden mot en manglende blokk, slik at et each uten blokk ikke krasjer. Dette gjøres ofte ved å returnere en enumerator, som du lærer om senere.
class List
def initialize(*x); @x = x; end
def each
return @x.to_enum unless block_given?
@x.each { |i| yield i }
end
end
puts List.new(5, 6).each.classBygg andre metoder
Når each finnes, kan du bygge andre metoder oppå den i samme klasse.
class Numbers
def initialize(*n); @n = n; end
def each; @n.each { |i| yield i }; end
def total
sum = 0
each { |i| sum += i }
sum
end
end
puts Numbers.new(1, 2, 3, 4).totalBeregnede sekvenser
each trenger ikke å lagre noe; den kan generere verdier underveis.
class Evens
def initialize(limit); @limit = limit; end
def each
n = 0
while n <= @limit
yield n
n += 2
end
end
end
Evens.new(8).each { |x| puts x }Grunnlaget for Enumerable
Din each er den eneste byggesteinen Enumerable trenger. I neste leksjon inkluderer du den og får dusinvis av metoder uten ekstra arbeid.
class Range3
def each
(1..3).each { |n| yield n }
end
end
Range3.new.each { |n| print n }
putsSett det hele sammen
Med en egendefinert each får du full kontroll over iterasjonen:
yieldén gang per element.- Gå gjennom verdier i valgfri rekkefølge, generer verdier eller gi par.
- Returner
selfetter konvensjonen.
class Countdown
def initialize(from); @from = from; end
def each
@from.downto(1) { |n| yield n }
end
end
Countdown.new(3).each { |n| puts n }Rask sjekk
Test forståelsen din av egendefinert each.
Oppsummering
Du har lært å skrive en egendefinert each:
yieldsender elementer til blokken som kaller metoden.- Du styrer gjennomløpsrekkefølgen og kan generere verdier.
- Returner
selfetter konvensjonen. eacher grunnlaget for Enumerable.
class Squares
def initialize(n); @n = n; end
def each
(1..@n).each { |i| yield i * i }
end
end
Squares.new(4).each { |sq| puts sq }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 «Skrive egen each» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Ruby Academy, inkludert «Skrive egen each», 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 «Skrive egen each»?
Implementer iterasjon 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 «Skrive egen each»?
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
- Skrive egen each
- Inkludere Enumerable
- Late enumeratorer
- Enumerator-objekter