molily: generatoren mit yield

Beitrag lesen

Hallo,

function gen() {
   var i=0;
   while (true)
       yield i++;
}
var iter=gen();

könntest du mal kurz schreiben (für die, die jetzt die Doku noch nicht gelesen haben), was das mit dem "yield" auf sich hat? Für mich sieht das wie eine Endlosschleife aus.

Der Generator gen() erzeugt einen Iterator iter, auf dem man next() aufrufen kann. Das yield ist hier mehr wie ein return zu verstehen, es gibt beim Aufruf von next() das Ergebnis der Expression i++ zurück. Der Witz ist nun, dass i erhalten bleibt zwischen den verschiedenen Aufrufen von next, man es also hochzählen kann. Und die while-Schleife ist mehr eine Deklaration, die wird nicht wirklich so abgearbeitet. Sie gibt nur an, dass auf dem Iterator unendlich oft .next() aufgerufen werden kann (wenn ich das richtig verstehe).

Mathias