digitalmars.D.learn - multiple return
- %u (5/5) Apr 19 2011 I have function which have more than one return, and the code compile an...
- bearophile (8/14) Apr 19 2011 Currently in D there are two ways to return multiple values from a funct...
- Max Klyga (17/23) Apr 19 2011 In D, tuple is not built in type, it is defined in stantard library. To
- %u (9/9) Apr 20 2011 thanks you all, it works.
- bearophile (4/5) Apr 20 2011 One of the simpler ways is to think of a tuple as an array, and use some...
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?
Apr 19 2011
%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
Apr 19 2011
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())); }
Apr 19 2011
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); }
Apr 20 2011
%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
Apr 20 2011