Thread overview
[Question] Could a function return a list of arguments to call another function?
Jun 28, 2013
MattCoder
Jun 28, 2013
Ellery Newcomer
Jun 28, 2013
MattCoder
Jun 28, 2013
David
Jun 28, 2013
Simen Kjaeraas
Jun 28, 2013
MattCoder
June 28, 2013
Hi,

I would like to know if it's possible to pass the return of a function as argument to another function as below:

import std.stdio;

auto foo(int x, int y){
	writeln(x, y);
	return 3, 4;
}

void main(){
	foo(foo(1,2));
}

I would like to print:
1 2
3 4

PS: I tried return a tuple but it doesn't works.

Thanks,

Matheus.
June 28, 2013
On 06/28/2013 11:07 AM, MattCoder wrote:
> Hi,
>
> I would like to know if it's possible to pass the return of a function
> as argument to another function as below:
>
> import std.stdio;
>
> auto foo(int x, int y){
>      writeln(x, y);
>      return 3, 4;
> }
>
> void main(){
>      foo(foo(1,2));
> }
>
> I would like to print:
> 1 2
> 3 4
>
> PS: I tried return a tuple but it doesn't works.
>
> Thanks,
>
> Matheus.

No, functions cannot return tuples.

However, they can return std.typecons.Tuple, so you could do this:

auto foo(int i, int j) {
    writeln(i, " ", j);
    return tuple(3,4);
}
void main() {
    foo(foo(1,2).field);
}

June 28, 2013
On Fri, 28 Jun 2013 20:07:23 +0200, MattCoder <mattcoder@hotmail.com> wrote:

> Hi,
>
> I would like to know if it's possible to pass the return of a function as argument to another function as below:
>
> import std.stdio;
>
> auto foo(int x, int y){
> 	writeln(x, y);
> 	return 3, 4;
> }
>
> void main(){
> 	foo(foo(1,2));
> }
>
> I would like to print:
> 1 2
> 3 4
>
> PS: I tried return a tuple but it doesn't works.
>
> Thanks,
>
> Matheus.

Not directly,  no. But this should work:


import std.stdio;
import std.typecons : tuple;

auto foo(int x, int y){
	writeln(x, y);
	return tuple(3, 4);
}

void main(){
	foo(foo(1,2).tupleof);
}
-- 
Simen
June 28, 2013
On Friday, 28 June 2013 at 19:39:41 UTC, Ellery Newcomer wrote:
> However, they can return std.typecons.Tuple, so you could do this:
>
> auto foo(int i, int j) {
>     writeln(i, " ", j);
>     return tuple(3,4);
> }
> void main() {
>     foo(foo(1,2).field);
> }


Hi Ellery,

Thanks for your help, it works nicely.
June 28, 2013
On Friday, 28 June 2013 at 19:43:37 UTC, Simen Kjaeraas wrote:
> import std.stdio;
> import std.typecons : tuple;
>
> auto foo(int x, int y){
> 	writeln(x, y);
> 	return tuple(3, 4);
> }
>
> void main(){
> 	foo(foo(1,2).tupleof);
> }

Hi Simen,

Thanks for your help too, it worked!
June 28, 2013
> However, they can return std.typecons.Tuple, so you could do this:
> 
> auto foo(int i, int j) {
>     writeln(i, " ", j);
>     return tuple(3,4);
> }
> void main() {
>     foo(foo(1,2).field);
> }
> 

"field" is deprecated in favor of "expand"