Closed. This question is opinion-based。它当前不接受答案。












想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

5年前关闭。



Improve this question





C#具有生成器函数,其语法如下:

IEnumerable<int> GetNats(int max)
{
   for (int i=0; i < max; ++i)
      yield return i;
}


生成器表达式是我对编程语言感兴趣的一个功能(类似于Java,Scala,ActionScript和C#的简单的面向对象编程)。这些本质上是生成器功能的语法糖。

我当前最喜欢的候选人是以下语法:

IEnumerable<int> nats =
  witheach (i in range(0, 42))
     yield i * 2;


表达式range(0, 42)是内置的生成器函数。

所以我的问题是,您希望使用C#/ Java / Scala / ActionScript类型语言为生成器表达式选择哪种语法,为什么?

可能会影响响应的一些因素包括Scala和ActionScript,我的语言中的类型在类型之后声明。例如:

var myVar : SomeType = initialValue;


匿名函数也如下所示:

var myFunc = function(int x) {
  return x + 1;
}


除此之外,我的其他语言语法类似于Java或C#。我的语言有一个foreach语句,它与C#非常相似。

最佳答案

还有Python's方法-生成器没有特殊的语法;仅需要一个“ yield”语句即可。可以使用任何带有块的语句,尽管我希望只找到实际使用的循环:

IEnumerable<int> nats =
    for (i in range(0,42))
        yield i*2

String phrase = "I want to buy some cheese.";
IEnumerable<int> substrs =
    for (i in 0 .. phrase.length)
        for (j in i .. phrase.length+1)
            yield phrase[i..j]


在这里,我假设正确的端点未包含在范围内。

老实说,当我在Python中看到这个时,我不得不怀疑:“以什么代价?”

10-07 19:03
查看更多