Thanks guys)
auto With(alias fun, I)(I o) // maybe add a template constraint
here
{
static if(isAssignable!(I, typeof(null)))
return o is null ? null : fun(o);
else
return fun(o);
}
foreach(p; persons)
p.With!(x => x.address);
Now if I want add a somewhat task into expression "x =>
x.address", for example "writeln(x.address)", a code should be
rewritten like
foreach(p; persons)
p.With!(x => {writeln(x.address); return x.address;}());
As I understand, right part of expression above - "{ ... }()" is
anonymous function (or delegate, or closure) that immediately
called in lambda expression. Right? Is right behaviour?