私は入力としてリストまたはジェネレータのいずれかをとることができる関数を記述しようとしています。たとえば、この機能:forループでES6 javascriptでジェネレータを再利用するにはどうすればいいですか?
function x(l) {
for (let i of l) {
console.log(i);
}
for (let i of l) {
console.log(i);
}
}
私はこのようにそれを実行した場合:
x([1,2,3])
は、それが表示されます。
1
2
3
1
2
3
は、今私は、入力として発電機を使用したい:
function *y() {
yield 5
yield 6
yield 7
}
これらは動作しません:
x(y())
x(y)
出力は次のようになります。
5
6
7
undefined
私はそれを動作させることができるように何をする必要がありますか?
のJavaの観点から、上記機能y
はジェネレータとy()
はイテレータあります。 [1,2,3]
はリストで、Javaではリストはジェネレータです。しかし、javascript forループは、イテレータを予期しています。つまり、再起動できません。これはjavascriptの脆弱性のようですが、forループはジェネレータではなくイテレータで動作します。
オカイ!わかった。 yはジェネレータ関数、y()はイテレータ、Symbol.iteratorで書いたものは繰り返し使用できる繰り返し可能なものです。 forループはイテレータまたはiterableを取得できます。私はあなたの1ライナーが私のために働くのでiterableが欲しかった。ありがとう! – Eyal