我有:
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
参数,这将超出范围。如果您尝试创建本地function
或delegate
. 我也考虑过用 来创建一个函数对象opCall
,但是你不能用那些map
(可以吗?)。
一些要求:
- 返回的范围必须是惰性的(因此不要先将其复制到数组中)
- 假设这
getBar
是获取数据的唯一方法。 - 我希望地图被类封装(即不将地图移动到呼叫站点)。