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?

Reply via email to