JavaScript-də iteratorların bir dəfə işləməsi
Hər bir iterator ancaq bir dəfə dövrədə
iştirak edə bilər. Bu bir qədər gözlənilməzdir,
amma məntiqlidir - axı bitmiş iterator
öz done-nı false-ə təyin edir,
bu isə o deməkdir ki, artıq təkrarən gəzilə bilməz.
Gəlin buna əmin olaq. Tutaq ki, bizim aşağıdakı generator var:
function *func() {
yield 1;
yield 2;
yield 3;
}
Gəlin iterator yaradaq:
let iter = func();
Gəlin iteratoru bir dövrə ilə gəzək:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
İndi isə iteratoru iki dövrə ilə gəzək:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // işləmir
}
Problemi həll etmək üçün hər yeni dövrə üçün öz iteratorunu yaratmaq lazımdır:
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 sadələşdirə bilərik:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Aşağıdakı kodda edilmiş səhvi düzəldin:
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);
}