42

ECMAScript 6 では、反復のためのジェネレーター、イテレーター、およびシンタックス シュガーが導入されています。フラグ付きの Node.JS v0.11.4

--harmony --use_strict --harmony_generators

次のジェネレータを理解しています

function* fibonacci() {
  let previous = 0;
  let current = 1;

  while(true) {
    let temp = previous;
    previous = current;
    yield current = temp + current;
  }
}

次に、1000 未満のフィボナッチ数を出力できます。

for(let value of fibonacci()) {
    if(value > 1000) { break; }
    console.log(value);
}

この例では、whileループではなくforループの方がより自然で、次のようになります。

while(value of fibonacci() < 1000) {
    console.log(value);
}

イテレータの反復は、whileループではなくループで実行できforますか?

4

4 に答える 4

15

next関数を使用してジェネレーターを段階的に呼び出すことができます

var sequence = fibonacci();
var value;
while ((value = sequence.next()) < 1000) {
    console.log(value);
}

さらに、より良い解決策は次のようになります。

function* fibonacci(limit){
  let previous = 0;
  let current = 1;

  while(previous + current < limit) {
    let temp = previous;
    previous = current;
    yield current = temp + current;
  }
}

for(let value of fibonacci(1000)) {
    console.log(value);
}
于 2013-07-07T14:05:23.433 に答える
1

function *bar(){
  yield 1;
  yield 2;
  yield 3;
  return 4;
}

var value,
  g = bar();

while((value = g.next()).value){
  console.log(value);
}

//Object {value: 1, done: false}
//Object {value: 2, done: false}
//Object {value: 3, done: false}
//Object {value: 4, done: true}
于 2016-02-03T16:45:48.397 に答える
0

はい、通常のジェネレーター メソッドを使用してこれを行うことができます。

var fib = fibonacci(), value;
while( (value = fib.next()) < 1000 ) {
    console.log(value);
}

for...of私はそれらの次の呼び出しの処理と処理を処理するステートメントを好むようですがStopIteration(シーケンスが有限である場合)。

于 2013-07-07T14:05:32.833 に答える