у меня есть:Использование std.algorithm.map с функциями-членами в D2
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
это единственный способ получения данных. - Я хочу, чтобы карта была инкапсулирована классом (т. Е. Не перемещала карту на сайт вызова).
Не могли бы вы рассказать о том, что вы имеете в виду, «то, что вы пытаетесь сделать, как-то работает на практике». - Конечно, это не работает для меня. –
@Peter: Я так же смущен, как вы о том, что работает, а что нет. Все, что я говорю, это то, что в некоторых случаях делегаты и т. Д. Работают на практике, хотя я понятия не имею, как это сделать. Это действительно нужно уточнить и должен быть отчет об ошибке. На данный момент просто нет хорошего ответа, кроме, возможно, в голове Уолтера. – dsimcha