www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Return data from different types of conditional operation

reply "Dennis Ritchie" <dennis.ritchie mail.ru> writes:
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
next sibling parent "wobbles" <grogan.colin gmail.com> writes:
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
prev sibling parent reply "John Colvin" <john.loughran.colvin gmail.com> writes:
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
parent reply "rumbu" <rumbu rumbu.ro> writes:
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:
 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; }
If 'true' is known at compile time, it works: auto foo() { static if (true) { return 0; } else return "true"; }
Apr 23 2015
next sibling parent "Dennis Ritchie" <dennis.ritchie mail.ru> writes:
Thank you all.
I did not know before, that this behavior is characteristic of 
dynamically typed programming languages.
Apr 23 2015
prev sibling parent "biozic" <dransic gmail.com> writes:
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:
 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; }
If 'true' is known at compile time, it works: auto foo() { static if (true) { return 0; } else return "true"; }
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.
Apr 23 2015