On Fri, 27 Apr 2012 14:52:08 +0200, Joseph Rushton Wakeling <[email protected]> wrote:

Hello all,

Just recently I tried returning a Tuple from a function and received an error message about this not being allowed.

Reading up a bit on the D site I'm not clear -- is it a determined policy for the language that it's not possible to return a tuple, or is it just something that has not yet been implemented?

Assuming it's language policy or just not going to arrive for some time, any advice on how to get a similar effect of returning multiple values? I settled on defining a custom struct as return-type, but I'm not overly happy about it.


std.typecons has a type called Tuple, which is probably what you want:

import std.typecons;
Tuple!( int, string ) foo( ) {
    return tuple( 42, "Hello, world!" );
}

void bar( ) {
    auto a = foo( );
    assert( a[0] == 42 );
    assert( a[1] == "Hello, world!" );
}

There has been talk of making tuple support more built-in, but such has
not yet happened, and it is unclear when and if it will happen.

Oh, and there's more - Tuple supports named fields:

Tuple!( int, "amount", string, "color" ) baz( ) {
    // I thought this worked, but apparently not:
    //return tuple( 12, "red" );

    return typeof( return )( 12, "red" );
}

void qux() {
    auto b = baz( );
    assert( b.amount == 12 );
    assert( b.color = "red" );
}

Reply via email to