either
Nick Sabalausky
a at a.a
Sun Jan 9 12:16:51 PST 2011
"Nick Sabalausky" <a at a.a> wrote in message
news:igd57p$2k1k$1 at digitalmars.com...
> "Andrei Alexandrescu" <SeeWebsiteForEmail at erdani.org> wrote in message
> news:igcvll$29k5$1 at digitalmars.com...
>>I wrote a simple helper, in spirit with some recent discussions:
>>
>> // either
>> struct Either(Ts...)
>> {
>> Tuple!Ts data_;
>> bool opEquals(E)(E e)
>> {
>> foreach (i, T; Ts)
>> {
>> if (data_[i] == e) return true;
>> }
>> return false;
>> }
>> }
>>
>> auto either(Ts...)(Ts args)
>> {
>> return Either!Ts(tuple(args));
>> }
>>
>> unittest
>> {
>> assert(1 == either(1, 2, 3));
>> assert(4 != either(1, 2, 3));
>> assert("abac" != either("aasd", "s"));
>> assert("abac" == either("aasd", "abac", "s"));
>> }
>>
>> Turns out this is very useful in a variety of algorithms. I just don't
>> know where in std this helper belongs! Any ideas?
>>
>
> For years I've just been doing this:
>
> if( [1, 2, 3].contains(1) )
>
> Although I think I needed to write a new "contains" to wrap existing
> functions when I switched from Tango to Phobos.
>
> Of course, "1 in [1,2,3]" would be much better ;) But whateever. Either
> way.
>
> But I suppose your "either" avoids an allocation, doesn't it? (And I'd
> lean more towards "any" than "either" like the other people).
>
It'd be really cool to have that work for the other comparison operators,
too.
More information about the Digitalmars-d
mailing list