JavaScript-da iteratoryň bir gezek işleşi
Her bir iterator aýlawda diňe bir gezek
okat bolar. Bu biraz gözlenilmedik,
ýöne mäkül - sebäbi aýlanan iterator
özüniň done diýen ýagdaýyny false edýär,
ýagny mundan beýläk gaýtalanap bilmeýär.
Geliň munuň ýaly bolýandygyna göz ýetireli. Bizde aşakdaky generator bolsun:
function *func() {
yield 1;
yield 2;
yield 3;
}
Iterator ýasaýalyň:
let iter = func();
Iteratory bir aýlaw bilen aýlanyň:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
Indi iteratory iki aýlaw bilen aýlanyň:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // işlemeýär
}
Meseläni çözmek üçin her bir täze aýlaw üçin öz iteratoryňyzy döretmeli:
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
}
Ýönekeýleşdirip bileris:
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
for (let elem of func()) {
console.log(elem); // 1, 2, 3
}
Aşakdaky koda ýol goýberlen ýalňyşlygy düzediň:
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);
}