digitalmars.D.learn - Return data from different types of conditional operation
- Dennis Ritchie (14/14) Apr 23 2015 Hi,
- wobbles (4/18) Apr 23 2015 Because 0 is an int and "true" is a string.
- John Colvin (13/27) Apr 23 2015 import std.variant, std.stdio;
- rumbu (8/41) Apr 23 2015 If 'true' is known at compile time, it works:
- Dennis Ritchie (3/3) Apr 23 2015 Thank you all.
- biozic (10/54) Apr 23 2015 Yes, but
Hi, Why the program can not return different types of data from the conditional operator? ----- import std.stdio; auto foo() { if (true) { return 0; } else return "true"; } void main() { writeln(foo); }
Apr 23 2015
On Thursday, 23 April 2015 at 09:48:21 UTC, Dennis Ritchie wrote:Hi, Why the program can not return different types of data from the conditional operator? ----- import std.stdio; auto foo() { if (true) { return 0; } else return "true"; } void main() { writeln(foo); }Because 0 is an int and "true" is a string. They're totally different types, and in a statically typed language like D, that just wont work.
Apr 23 2015
On Thursday, 23 April 2015 at 09:48:21 UTC, Dennis Ritchie wrote:Hi, Why the program can not return different types of data from the conditional operator? ----- import std.stdio; auto foo() { if (true) { return 0; } else return "true"; } void main() { writeln(foo); }import std.variant, std.stdio; auto foo() { if (true) return Variant(0); else return Variant("Hello"); } void main() { foo.writeln; }
Apr 23 2015
On Thursday, 23 April 2015 at 10:06:45 UTC, John Colvin wrote:On Thursday, 23 April 2015 at 09:48:21 UTC, Dennis Ritchie wrote:If 'true' is known at compile time, it works: auto foo() { static if (true) { return 0; } else return "true"; }Hi, Why the program can not return different types of data from the conditional operator? ----- import std.stdio; auto foo() { if (true) { return 0; } else return "true"; } void main() { writeln(foo); }import std.variant, std.stdio; auto foo() { if (true) return Variant(0); else return Variant("Hello"); } void main() { foo.writeln; }
Apr 23 2015
Thank you all. I did not know before, that this behavior is characteristic of dynamically typed programming languages.
Apr 23 2015
On Thursday, 23 April 2015 at 10:26:09 UTC, rumbu wrote:On Thursday, 23 April 2015 at 10:06:45 UTC, John Colvin wrote:Yes, but auto foo() { static if (true) { return 0; } else this(statment) is [not.parsed]; } so it's not just working around a problem of returned type inference.On Thursday, 23 April 2015 at 09:48:21 UTC, Dennis Ritchie wrote:If 'true' is known at compile time, it works: auto foo() { static if (true) { return 0; } else return "true"; }Hi, Why the program can not return different types of data from the conditional operator? ----- import std.stdio; auto foo() { if (true) { return 0; } else return "true"; } void main() { writeln(foo); }import std.variant, std.stdio; auto foo() { if (true) return Variant(0); else return Variant("Hello"); } void main() { foo.writeln; }
Apr 23 2015