Tuples citizenship

kennytm kennytm at gmail.com
Fri Mar 2 01:53:19 PST 2012


Jonathan M Davis <jmdavisProg at gmx.com> wrote:
> On Friday, March 02, 2012 09:31:14 kennytm wrote:
>> Jonathan M Davis <jmdavisProg at gmx.com> wrote:
>>> That's assuming that you're passing all of the pieces of the tuple to the
>>> function. Often, that's not the case at all. Take the findSplit trio, for
>>> instance. What are the odds that you're going to want to pass all of the
>>> elements in the tuples that any of the return to another function? About
>>> zero, I'd say. It's _much_ more likely that you're going to want to take
>>> the results and then pass _one_ of them to another function. So, as it
>>> stands, chaining with those functions just doesn't work unless you only
>>> care about one of the results in the tuple.
>>> 
>>> - Jonathan M Davis
>> 
>> How does 'out' make chaining any easier? Suppose we have a `R3
>> findSplit2(R1, R2, out R4, out R5)`, how to chain if we want to pass the R4
>> to another function?
>> 
>>     R5 ignored;
>>     R4 theRange;
>>     findSplit2(haystack, needle, theRange, ignored);
>>     return doSomething(theRange);
>> 
>> vs
>> 
>>     return doSomething(findSplit(haystack, needle)[1]);
> 
> True, you can't chain using the out parameters, but you _can_ chain using the 
> return value, whereas if you have a tuple, you can't chain _at all_ unless you 
> actually need all of the returned values (either as a tuple or expanded) or if 
> you only need _one_ of the returned values, in which case you can use the 
> subscript operator. So, you can definitely chain better without a tuple than 
> with.
> 
> - Jonathan M Davis

You can just chain with

    return doSomething(findSplit(haystack, needle)[0]);

if you just need the return value. Compare with 'out':

    R4 ignored;
    R5 ignored2;
    return doSomething(findSplit(haystack, needle, ignored, ignored2));

How do you chain with _partial_ amount of return values with 'out'?


More information about the Digitalmars-d mailing list