2016-11-03 8 views
1

イテレータをES6で実装するには、{value: Any, done: Boolean}のような構造体を返すメソッドnextを実装する必要があります。ES6のIterator.next()メソッドで値を返すことができないのはなぜですか?

私はdoneフィールドがこれ以上の値があることを知らせるために必要であることを理解しますが、反復子自体は単純に同じ仕事をするためのフィールド/メソッドを持っていなかった理由私は理解していません。

潜在的なバグ(例えば、誰かが結果への参照を保持することを決めた場合、)に対する防御策として、すべての反復ステップで新しいオブジェクトを作成する必要があり、しかし、確かに彼らはこのインターフェースを選択する理由がありました。

私には何が欠けていますか?

[EDIT]

最も明白な可能な代替実装私は考えることができ例:

function iter(arr) { 
    var idx = 0, done = false; 
    return { 
     isDone: function() { 
      return done; 
     }, 
     next: function() { 
      if(idx >= arr.length - 1) { 
       done = true; 
      } 
      return arr[idx++]; 
     } 
    }; 
} 

var i = iter([1, 2, 3, 4]); 

while(!i.isDone()) { 
    console.log(i.next()); 
} 
+0

しかし、イテレータ自体が単に同じ仕事をするフィールド/メソッドを持つことができなかった理由はわかりません - 実装方法を教えてください。 –

+0

が標準です。 –

+1

Javaは 'hasNext()'メソッドを使用することを選択しました。この種の質問に答えるのは難しいです。なぜなら、正確な質問のために第一の情報源が存在しなければ、その標準が選ばれた理由を確かに知る方法がありません。 – 4castle

答えて

関連する問題