JavaScript හි iterator වල එක් වරක් ක්රියා කිරීම
සෑම iterator එකක්ම එක් වරක් පමණක් loop එකකට සහභාගී විය හැකිය. මෙය ටිකක් අනපේක්ෂිතයි,
නමුත් තර්කානුකූලයි - හේතුව, ගමන් කරන ලද iterator එක
එහි done අගය false ලෙස සකසයි,
එයින් අදහස් වන්නේ එය තවදුරටත් පුනරාවර්තනය කළ නොහැකි බවයි.
අපි එය සනාථ කර ගනිමු. අපට පහත දක්වන ඇති generator function එකක් ඇතැයි සිතමු:
function *func() {
yield 1;
yield 2;
yield 3;
}
Iterator එකක් සාදමු:
let iter = func();
Iterator එක loop එකකින් පුනරාවර්තනය කරමු:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
දැන් අපි එකම iterator එක loop දෙකකින් පුනරාවර්තනය කිරීමට උත්සාහ කරමු:
for (let elem of iter) {
console.log(elem); // 1, 2, 3
}
for (let elem of iter) {
console.log(elem); // ක්රියාත්මක නොවේ
}
මෙම ගැටළුව විසඳීම සඳහා, සෑම නව loop එකක් සඳහාම නව iterator එකක් සෑදිය යුතුය:
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);
}