ジェネレータ用のhasNext()メソッドはどのように実装しますか?私はreturnステートメントとしてジェネレータを追加し、クロージャから降伏するような多くのオプションを試しました。それを印刷して、最初の値を取得し、その後などを使用して、それらのどれも実際に働いた。hasNext()for ES6 Generator
How to loop the JavaScript iterator that comes from generator?のように使用できますが、hasNext()を追加できるかどうかは不思議です。
あなたがstart + 1 < end
かどうかをチェックすることにより
Boolean
として定義
hasNext
を持つ
range
からオブジェクトを作成して返すことができ
function *range(start,end){
while(start < end){
yield start;
start++
}
}
let iterator = range(1,10);
// so I can do something like this.
while(iterator.hasNext()){
console.log(iterator.next().value);
}
引用疑問がはっきり 'done'、この場合には使用すべきであると述べています。 'hasNext'はジェネレータの目的に反し、遅れて反復され、次の' next() 'までの最後の反復であるかどうかは分かりません。 – estus
私はそれを得て、私はちょうどこれについて理由を考えようとしています。 「hasNextがジェネレータの目的を無視している」とはどういう意味なのか分かりません。 –
@ YasinYaqoobi:値を消費することなく先を見ることはできません。つまり、次の値が*あるかどうかを知るためには、次の値を取得する必要があります。つまり、呼び出し元が 'hasNext'を呼び出し、結果が' true'の場合、呼び出し側はその次の値を取得できません。 –