更容易迭代生成器?

Num*_*ock 5 javascript c# generator node.js ecmascript-6

是否有更简单的方法(比我使用的方式)迭代生成器?某种最佳实践模式或常见包装?

在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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在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);
}
Run Code Online (Sandbox Code Playgroud)

虽然我会期待一些简单的事情......

function* numbers(max) {
  let n = 0;
  while (counter < max) {
    yield n++;
  }
}

for (let n in numbers(10)) {
  console.log(n);
}
Run Code Online (Sandbox Code Playgroud)

......更具可读性和简洁性,但显然它并不那么容易?我已经尝试node 0.12.7--harmony旗帜了node 4.0.0 rc1.如果可以使用此功能,我还需要做些什么来启用此功能(包括let我在使用时的使用情况)吗?

Ben*_*une 15

您需要使用for..of生成器的语法.这为可迭代对象创建了一个循环.

function* numbers(max) {
  let n = 0;
  while (n < max) {
    yield n++;
  }
}
Run Code Online (Sandbox Code Playgroud)

使用它:

for (let n of numbers(10)) {
  console.log(n); //0123456789
}
Run Code Online (Sandbox Code Playgroud)

文档

  • *当*是`为...而不是...为...在...这些习惯。:) (2认同)
  • 啊`for of`是最好的。我无法理解 Airbnb 怎么能在 eslint 中制定一项反对它的规则。 (2认同)