| Thread overview | |||||||
|---|---|---|---|---|---|---|---|
|
April 19, 2011 multiple return | ||||
|---|---|---|---|---|
| ||||
I have function which have more than one return, and the code compile and run but it gives rong result -I guess-, so i use tuple but the compiler can't return tuple. how can I return values? why I can't return tuple? | ||||
April 19, 2011 Re: multiple return | ||||
|---|---|---|---|---|
| ||||
Posted in reply to %u | %u:
> I have function which have more than one return, and the code compile and run but it gives rong result -I guess-, so i use tuple but the compiler can't return tuple.
>
> how can I return values?
> why I can't return tuple?
Currently in D there are two ways to return multiple values from a function:
- To use a std.typecons.tuple (not a std.typetuple).
- To use "out" function arguments.
Regarding typetuples, they can't be used to return multiple values from a function because of differences in stack alignment, this means incompatible ABI of D functions and D typetuples. This is not a great thing, but I presume that doing otherwise breaks a "zero overhead" constraint Walter seems to require to D typetuples.
Given the presence of typecons tuples (and maybe in future some syntax sugar to use them in a more handy way), this is not a significant limitation. It's mostly strange to have two very different kinds of tuples in a single language.
Bye,
bearophile
| |||
April 19, 2011 Re: multiple return | ||||
|---|---|---|---|---|
| ||||
Posted in reply to %u | On 2011-04-20 01:35:46 +0300, %u said:
> I have function which have more than one return, and the code compile and run
> but it gives rong result -I guess-, so i use tuple but the compiler can't
> return tuple.
>
> how can I return values?
> why I can't return tuple?
In D, tuple is not built in type, it is defined in stantard library. To use it, you must import module std.typecons
Example:
import std.typecons;
struct Foo {}
Tuple!(int, string, Foo) baz() {
// some computation here
return tuple(13, "inches", Foo());
}
void main() {
auto bar = baz();
assert(bar == tuple(13, "inches", Foo()));
}
| |||
April 20, 2011 Re: multiple return | ||||
|---|---|---|---|---|
| ||||
Posted in reply to %u | thanks you all, it works.
last thing, I have this
Tuple!(int,int,int)(1, 2, 3)
how can I use the return values individual?
to be more clear if I rturn tuple(a, b, c) can I write in the code
void main() {
//call the function here
writeln(a);
}
| |||
April 21, 2011 Re: multiple return | ||||
|---|---|---|---|---|
| ||||
Posted in reply to %u | %u:
> how can I use the return values individual?
One of the simpler ways is to think of a tuple as an array, and use sometuple[0] to take its first item, etc. But your tuple indexes need to be compile-time constants.
Bye,
bearophile
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply