在D2中使用带有成员函数的std.algorithm.map

时间:2010-10-03 01:23:28

标签: map range d phobos

我有:

Foo foo = new Foo();

foreach (i; 0..10)
{
  Bar bar = foo.getBar(i);
  ...
}

我希望能够代之以(等效地):

foreach (bar; foo.getAllBars())
{
  ...
}

如何实施getAllBars()

我想到这样的事情:

class Foo
{
  auto getAllBars()
  {
    return map!(getBar)(iota(10));
  }
}

但是你当然不能这样做,因为getBar取决于this参数,这将超出范围。如果您尝试创建本地functiondelegate,则同样适用。我还考虑使用opCall创建一个函数对象,但你不能使用map(可以吗?)。

一些要求:

  • 返回的范围必须是惰性的(因此不要先将其复制到数组中)
  • 假设getBar是获取数据的唯一方法。
  • 我希望地图被类封装(即不将地图移动到呼叫站点)。

1 个答案:

答案 0 :(得分:1)

std.algorithm.map通过模板别名参数工作,绑定在编译时。 Walter Bright(D语言设计师)在这些情况下还没有明确模板别名参数的语义,尽管你想要做的似乎以某种方式在实践中工作。澄清这是一个todo(我认为)。也许你最好在digitalmars.d新闻组上问这个,因为这会引起Walter的注意,并鼓励他澄清语义。