Objek Enumerator
Iterasi eksternal.
Objek Enumerator adalah pelajaran Ruby Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Ruby Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Ruby Academy mencakup 4 pelajaran total.
Iterasi Eksternal
Enumerator adalah objek yang merepresentasikan sebuah iterasi. Objek ini mendukung iterasi eksternal: Anda mengambil nilai satu per satu dengan next, alih-alih memberikan blok kepada each.
enum = [10, 20, 30].each
puts enum.next
puts enum.nextMendapatkan Enumerator
Panggil metode iterasi seperti each tanpa blok, lalu Anda menerima Enumerator alih-alih langsung menjalankan iterasi.
enum = [1, 2, 3].each
puts enum.classMengambil Elemen Berikutnya
next mengembalikan elemen berikutnya setiap kali Anda memanggilnya. Enumerator mengingat posisinya.
letters = ["a", "b", "c"].each
puts letters.next
puts letters.next
puts letters.nextStopIteration di Akhir
Ketika semua nilai habis, next memunculkan StopIteration. Anda dapat menanganinya agar iterasi berhenti dengan baik.
enum = [1, 2].each
begin
loop { puts enum.next }
rescue StopIteration
puts "done"
endMelihat dan Mengulang dari Awal
peek melihat nilai berikutnya tanpa memajukan posisi; rewind mengatur ulang posisi ke awal.
enum = [5, 6, 7].each
puts enum.peek
puts enum.next
enum.rewind
puts enum.nextMembuat Enumerator Khusus
Buat enumerator Anda sendiri dengan Enumerator.new. Blok tersebut menerima penghasil nilai y; dorong nilai dengan y << atau y.yield.
evens = Enumerator.new do |y|
n = 0
loop do
y << n
n += 2
end
end
puts evens.next
puts evens.next
puts evens.nextEnumerator Tak Terbatas
Karena berbasis pengambilan, Enumerator khusus dapat berjalan tanpa batas. Anda hanya mengambil sebanyak yang diperlukan.
counter = Enumerator.new do |y|
i = 1
loop { y << i; i += 1 }
end
p counter.first(5)Enumerator Mendukung Enumerasi
Enumerator menyertakan Enumerable, sehingga semua metode umum (map, select, take) juga berfungsi, sehingga iterasi internal dan eksternal dapat digunakan bersama.
fib = Enumerator.new do |y|
a, b = 0, 1
loop do
y << a
a, b = b, a + b
end
end
p fib.take(8)with_index
with_index menambahkan indeks ke Enumerator apa pun, dan secara opsional dapat dimulai dari angka khusus.
["x", "y", "z"].each.with_index(1) do |item, i|
puts "#{i}: #{item}"
endMengembalikan Enumerator dari each
Dalam kelas Anda sendiri, kembalikan to_enum(:each) (atau enum_for) ketika tidak ada blok yang diberikan, sehingga pemanggil dapat melakukan iterasi secara eksternal.
class Trio
def each
return to_enum(:each) unless block_given?
yield 1; yield 2; yield 3
end
end
e = Trio.new.each
puts e.next
puts e.nextMenggabungkan Semuanya
Enumerator memberi Anda kendali yang terperinci:
- Ambil nilai dengan
next, intip nilai berikutnya, atau mulai ulang. - Buat enumerator khusus dengan
Enumerator.newdan penghasil nilai. - Enumerator tersebut bersifat enumerable, sehingga map/select/take dapat digunakan.
odds = Enumerator.new do |y|
n = 1
loop { y << n; n += 2 }
end
p odds.first(4)Pemeriksaan Singkat
Uji pemahaman Anda tentang objek Enumerator.
Ringkasan
Anda telah mempelajari objek Enumerator:
- Iterasi eksternal melalui
next,peek, danrewind. StopIterationmenandakan akhir iterasi.- Buat enumerator khusus dengan
Enumerator.new { |y| ... }. - Enumerator tersebut bersifat enumerable dan dapat berjalan tanpa batas.
nums = Enumerator.new { |y| 1.upto(3) { |n| y << n } }
puts nums.next
puts nums.nextPertanyaan yang Sering Diajukan
Apakah pelajaran “Objek Enumerator” gratis?
Ya — teks lengkap “Objek Enumerator” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Ruby Academy, upgrade ke CoddyKit PRO. Kursus Ruby Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Objek Enumerator”?
Iterasi eksternal. Kamu berlatih Ruby Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Ruby Academy?
Tidak diperlukan pengalaman sebelumnya. Ruby Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Objek Enumerator” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Ruby Academy ini?
Ya. Setiap pelajaran Ruby Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menulis each Kustom
- Menyertakan Enumerable
- Enumerator Malas
- Objek Enumerator