JavaScriptda iteratorlarning bir marta ishlashi
Har bir iterator siklda faqat
bir marta qatnasha oladi. Bu biroz kutilmagan,
lemin mantiqan - chaki bosib o'tilgan iterator
o'zining done ni false ga o'rnatadi,
shuning uchun u endi qayta takrorlanishi mumkin emas.
Keling, bunga ishonch hosil qilaylik. Quyidagi generatorimiz bor deb faraz qilaylik:
function *func() {
yield 1;
yield 2;
yield 3;
}
Keling, iterator yaratamiz:
let iter = func();
Keling, iteratorni bitta sikl bilan aylantiramiz:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
Endi keling, iteratorni ikki ta sikl bilan aylantiramiz:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // ishlamaydi
}
Muammoni hal qilish uchun har bir yangi sikl uchun o'z iteratoringizni yaratishingiz kerak:
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
}
Biz soddalashtirishimiz mumkin:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Quyidagi kodda qilingan xatoni tuzating:
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);
}