Ich hatte auch die gleiche Frage und kam hierher. Nachdem ich die Beiträge und Kommentare gelesen hatte, fühlte ich, dass die Verwendung des Generators in einer Pfeilfunktion vage zu sein scheint:
const generator = () => 2*3; // * implies multiplication
// so, this would be a confusing
const generator = () =>* something; // err, multiplying?
const generator = () =*> ... // err, ^^
const generator = ()*=> ... // err, *=3, still multiplying?
const generator=*()=> ... // err, ^^
const generator = *param => ... //err, "param" is not fixed word
Dies ist möglicherweise der Hauptgrund dafür, dass der Generator in Bezug auf die Pfeilfunktion nicht implementiert wurde.
Aber wenn ich einer von ihnen wäre, hätte ich so denken können:
const generator = gen param => ... // hmm, gen indicates a generator
const generator = gen () => ... // ^^
Das fühlt sich so an, als hätten wir eine asynchrone Funktion:
const asyncFunction = async () => ... // pretty cool
Da bei normaler Funktion das asynchrone Schlüsselwort vorhanden ist, wird es von der Pfeilfunktion verwendet - async () =>
wahrscheinlichasync function()
.
Es gibt jedoch kein Schlüsselwort wie gen
odergenerator
und leider verwendet die Pfeilfunktion es nicht.
Schlussfolgern:
Selbst wenn sie den Generator in der Pfeilfunktion implementieren möchten, müssen sie die Generatorsyntax in Kern js überdenken:
generator function myfunc() {}
// rather than
function* myfunc() {} // or, function *myfunc() {}
Und das wird ein großer Fehler sein. Es ist also ziemlich cool, die Pfeilfunktion vom Generator fernzuhalten.
Folgender @Bergi Kommentar :
Nein. Pfeilfunktionen sollen leicht sein (und zum Beispiel keinen Prototyp haben) und oft einzeilig, während Generatoren so ziemlich das Gegenteil sind.
Ich werde sagen, dass der zu verwendende Generatorzweck Run-Stop-Run ist, und daher denke ich nicht, dass wir uns um Prototypen, Lexika usw. kümmern müssen.
function*
Anweisung (Funktionsschlüsselwort gefolgt von einem Sternchen) definiert eine Generatorfunktion."