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