digitalmars.D.learn - Little quiz
- bearophile (13/13) Mar 24 2011 A little quiz for people here: guess the output of this little D2 progra...
- spir (7/18) Mar 24 2011 lol, would never haver guessed
- Jesse Phillips (11/26) Mar 24 2011 Starting from main. As we are performing a foreach over a tuple this wil...
- Jacob Carlborg (5/18) Mar 25 2011 I would guess it prints the values of all the fields in the struct
- bearophile (4/6) Mar 25 2011 That was of course my purpose, because tuples are a way to implement mul...
- Jacob Carlborg (6/12) Mar 25 2011 I'm not just meaning the expected values you pass in to the function,
- Kagamin (2/21) Mar 25 2011 According to docs tupleof returns type tuple, but TypeTuple doesn't seem...
- Kai Meyer (25/38) Mar 28 2011 That's pretty cool :) Seems like we should be able to expect the same
- bearophile (4/5) Mar 28 2011 Thank you. From the output of this line of code the problem seems not ca...
A little quiz for people here: guess the output of this little D2 program (it compiles correctly and doesn't crash at run time, so it's a fair question): import std.typecons: tuple; import std.c.stdio: printf; auto foo() { printf("foo\n"); return tuple(1, 2); } void main() { foreach (x; foo().tupleof) printf("%d\n", x); } Bye, bearophile
Mar 24 2011
On 03/25/2011 01:50 AM, bearophile wrote:A little quiz for people here: guess the output of this little D2 program (it compiles correctly and doesn't crash at run time, so it's a fair question): import std.typecons: tuple; import std.c.stdio: printf; auto foo() { printf("foo\n"); return tuple(1, 2); } void main() { foreach (x; foo().tupleof) printf("%d\n", x); }lol, would never haver guessed Denis -- _________________ vita es estrany spir.wikidot.com
Mar 24 2011
bearophile Wrote:A little quiz for people here: guess the output of this little D2 program (it compiles correctly and doesn't crash at run time, so it's a fair question): import std.typecons: tuple; import std.c.stdio: printf; auto foo() { printf("foo\n"); return tuple(1, 2); } void main() { foreach (x; foo().tupleof) printf("%d\n", x); }Starting from main. As we are performing a foreach over a tuple this will need to happen at compilation. As their are many bugs with compile time foreach I would think this code evaluates to nothing and thus the program prints nothing. However if that is working then I would expect foo() to be executed at compile-time which would mean 'foo' might be printed during compilation. As tupleof is supposed to return a type tuple, I'm unsure what gibberish printing it as a decimal would do. The other likely possibility is that the foreach is unrolled into code like: x = foo().tupleof[0] print... x = foo().tupleof[1] print... where .tupleof is some other fancy runtime thing. In this case you would get foo\nnumber\nfoo\nnumber... ------ So yeah, from that code I have no idea what it is supposed to do. But I am not surprised by its behavior.
Mar 24 2011
On 2011-03-25 01:50, bearophile wrote:A little quiz for people here: guess the output of this little D2 program (it compiles correctly and doesn't crash at run time, so it's a fair question): import std.typecons: tuple; import std.c.stdio: printf; auto foo() { printf("foo\n"); return tuple(1, 2); } void main() { foreach (x; foo().tupleof) printf("%d\n", x); } Bye, bearophileI would guess it prints the values of all the fields in the struct returned by "tuple". -- /Jacob Carlborg
Mar 25 2011
Jacob Carlborg:I would guess it prints the values of all the fields in the struct returned by "tuple".That was of course my purpose, because tuples are a way to implement multiple return values, and in some situations I want to print all the items of such return tuple, on separated lines, for debugging purposes, etc. But unfortunately (for me too) that's not the right answer. Try again... I have found a little surprise. Bye, bearophile
Mar 25 2011
On 2011-03-25 12:32, bearophile wrote:Jacob Carlborg:I'm not just meaning the expected values you pass in to the function, I'm also referring to any additional fields that might be present in the struct. -- /Jacob CarlborgI would guess it prints the values of all the fields in the struct returned by "tuple".That was of course my purpose, because tuples are a way to implement multiple return values, and in some situations I want to print all the items of such return tuple, on separated lines, for debugging purposes, etc. But unfortunately (for me too) that's not the right answer. Try again... I have found a little surprise. Bye, bearophile
Mar 25 2011
bearophile Wrote:A little quiz for people here: guess the output of this little D2 program (it compiles correctly and doesn't crash at run time, so it's a fair question): import std.typecons: tuple; import std.c.stdio: printf; auto foo() { printf("foo\n"); return tuple(1, 2); } void main() { foreach (x; foo().tupleof) printf("%d\n", x); } Bye, bearophileAccording to docs tupleof returns type tuple, but TypeTuple doesn't seem to be iteratable.
Mar 25 2011
On 03/24/2011 06:50 PM, bearophile wrote:A little quiz for people here: guess the output of this little D2 program (it compiles correctly and doesn't crash at run time, so it's a fair question): import std.typecons: tuple; import std.c.stdio: printf; auto foo() { printf("foo\n"); return tuple(1, 2); } void main() { foreach (x; foo().tupleof) printf("%d\n", x); } Bye, bearophileThat's pretty cool :) Seems like we should be able to expect the same behavior in all of these, but that doesn't appear to be the case at all. import std.typecons: tuple; import std.c.stdio: printf; auto foo() { printf("foo\n"); return tuple(1, 2); } void main() { printf("-----\n"); foreach (x; foo().tupleof) printf("%d\n", x); printf("-----\n"); auto f = foo(); printf("-----\n"); foreach (x; f.tupleof) printf("%d\n", x); printf("-----\n"); auto f2 = foo().tupleof; printf("-----\n"); foreach (x; f2) printf("%d\n", x); printf("-----\n"); }
Mar 28 2011
Kai Meyer:auto f2 = foo().tupleof;Thank you. From the output of this line of code the problem seems not caused by the static foreach. Bye, bearophile
Mar 28 2011