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);
}