迭代生成器的更简单方法?
Easier way to iterate over generator?
有没有更简单的方法(比我正在使用的方法)迭代生成器?某种最佳实践模式或通用包装器?
在 C# 中,我通常会有一些简单的东西:
public class Program {
private static IEnumerable<int> numbers(int max) {
int n = 0;
while (n < max) {
yield return n++;
}
}
public static void Main() {
foreach (var n in numbers(10)) {
Console.WriteLine(n);
}
}
}
在 JavaScript 中尝试相同的方法,这是我能想到的最好的方法:
function* numbers(max) {
var n = 0;
while (n < max) {
yield n++;
}
}
var n;
var numbers = numbers(10);
while (!(n = numbers.next()).done) {
console.log(n.value);
}
虽然我本以为会有这么简单的事情...
function* numbers(max) {
let n = 0;
while (counter < max) {
yield n++;
}
}
for (let n in numbers(10)) {
console.log(n);
}
... 更易读和简洁,但显然还没有那么简单?我试过 node 0.12.7
和 --harmony
标志以及 node 4.0.0 rc1
。如果此功能可用,我是否还需要做其他事情才能启用此功能(包括 let
的使用)?
您需要对生成器使用 for..of
语法。这为可迭代对象创建了一个循环。
function* numbers(max) {
let n = 0;
while (n < max) {
yield n++;
}
}
使用它:
for (let n of numbers(10)) {
console.log(n); //0123456789
}
有没有更简单的方法(比我正在使用的方法)迭代生成器?某种最佳实践模式或通用包装器?
在 C# 中,我通常会有一些简单的东西:
public class Program {
private static IEnumerable<int> numbers(int max) {
int n = 0;
while (n < max) {
yield return n++;
}
}
public static void Main() {
foreach (var n in numbers(10)) {
Console.WriteLine(n);
}
}
}
在 JavaScript 中尝试相同的方法,这是我能想到的最好的方法:
function* numbers(max) {
var n = 0;
while (n < max) {
yield n++;
}
}
var n;
var numbers = numbers(10);
while (!(n = numbers.next()).done) {
console.log(n.value);
}
虽然我本以为会有这么简单的事情...
function* numbers(max) {
let n = 0;
while (counter < max) {
yield n++;
}
}
for (let n in numbers(10)) {
console.log(n);
}
... 更易读和简洁,但显然还没有那么简单?我试过 node 0.12.7
和 --harmony
标志以及 node 4.0.0 rc1
。如果此功能可用,我是否还需要做其他事情才能启用此功能(包括 let
的使用)?
您需要对生成器使用 for..of
语法。这为可迭代对象创建了一个循环。
function* numbers(max) {
let n = 0;
while (n < max) {
yield n++;
}
}
使用它:
for (let n of numbers(10)) {
console.log(n); //0123456789
}