either

Mafi mafi at example.org
Sun Jan 9 11:03:16 PST 2011


Am 09.01.2011 19:42, schrieb Andrei Alexandrescu:
> 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?
>
>
> Andrei
This is exactly what I did today. In perl 6 it's called any which I 
think is a better name. There also 'none', 'all' and 'one'. There seems 
to be strange bug with the opEquals. Everything works but if you replace 
the opEquals template with it's actual instantiation dmd cry at you. See 
http://www.digitalmars.com/d/2.0/operatoroverloading.html#equals  and my 
last post.


More information about the Digitalmars-d mailing list