私は持っている:
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
それがデータを取得する唯一の方法であると仮定します。- マップをクラスでカプセル化したい (つまり、マップを呼び出しサイトに移動しない)。