JavaScriptда итераторларнинг бир марталик иши
Ҳар бир итератор циклда фақат бир марта
иштирок эта олади. Бу бир оз кутмагандир,
аммо мантиқан тўғри - чунки ўтган итератор
ўзининг done ни false га
ўрнатади, ва демак бошқа қайта такрорланмайди.
Келиб, буни ишонч ҳосил қилайлик. Бизда куйидаги генератор бор деб фараз қилайлик:
function *func() {
yield 1;
yield 2;
yield 3;
}
Итератор ясаймиз:
let iter = func();
Итераторни битта цикл билан такрорлаймиз:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
Энди итераторни иккита цикл билан такрорлаймиз:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // ишламайди
}
Муаммони ҳал қилиш учун ҳар бир янги цикл учун ўз итераторингизни яратишингиз керак:
let iter1 = func();
for (let elem of iter1) {
console.log(elem); // 1, 2, 3
}
let iter2 = func();
for (let elem of iter2) {
console.log(elem); // 1, 2, 3
}
Соддалаштиришимиз мумкин:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Куйидаги кодда қилган хатоликни тузантинг:
function *func() {
for (let i = 1; i <= 3; i++) {
yield i;
}
}
let elems = func();
for (let elem of elems) {
console.log(elem);
}
for (let elem of elems) {
console.log(elem);
}