Az iterátorok egyszeri működése JavaScriptben
Minden iterátor csak egyszer vehet részt egy ciklusban.
Ez egy kicsit meglepő, de logikus - hiszen a bejárt iterátor
a done értékét false-ra állítja,
ami azt jelenti, hogy már nem ismételhető meg.
Győződjünk meg erről. Legyen a következő generátorunk:
function *func() {
yield 1;
yield 2;
yield 3;
}
Készítsünk iterátort:
let iter = func();
Iteráljunk át az iterátoron egy ciklussal:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
Most pedig iteráljunk át az iterátoron két ciklussal:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // nem működik
}
A probléma megoldásához minden új ciklushoz saját iterátort kell létrehozni:
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
}
Leegyszerűsíthetjük:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Javítsa ki a következő kódban elkövetett hibát:
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);
}