I have:
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
or delegate
。我还考虑过创建一个函数对象opCall
,但你不能使用那些map
(你可以吗?)。
一些要求:
- 返回的范围必须是惰性的(因此不要先将其复制到数组中)
- 假使,假设
getBar
是获取数据的唯一方法。
- 我希望地图由类封装(即不将地图移动到调用站点)。
std.algorithm.map
通过模板别名参数工作,绑定是在编译时进行的。 Walter Bright(D 语言设计者)还不清楚这些情况下模板别名参数的语义,尽管您想要做的似乎是somehow在实践中工作。澄清这一点是待办事项(我认为)。也许您最好在 digitalmars.d 新闻组上询问这个问题,因为这会引起 Walter 的注意并鼓励他澄清语义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)