On Monday, 13 January 2020 at 17:58:57 UTC, Steven Schveighoffer wrote:
On 1/13/20 12:47 PM, H. S. Teoh wrote:

Why not write your own convenience wrapper?

        auto firstElement(R)(R r)
                if (isInputRange!R)
        {
                if (r.empty) throw new Exception(...);
                return r.front;
        }

        auto e = myData.find!(e => blah(e)).firstElement;

I certainly can (and did). I was wondering if there was something in Phobos to do it.

-Steve

`adjoin` can be used to run an inline lambda:
auto answer = arr.find!((item,x) => item.id == x)(id).adjoin!((n){enforce(!n.empty); return n.front;});

Using a simple alias you can have a flexible and nice to read solution: alias ensure(alias pred) = (n, const(char)[] msg = "`ensure` failed"){enforce(pred(n), msg); return n;}; // module scope for UFCS!

auto answer = arr.find!((item,x) => item.id == x)(id).ensure!(n => !n.empty).front;
or with custom message:
auto answer = arr.find!((item,x) => item.id == x)(id).ensure!(n => !n.empty)("element with id not found").front;

Reply via email to