Empty VS null array?

ProgrammingGhost dsioafiseghvfawklncfskzdcf at sdifjsdiovgfdisjcisj.com
Thu Oct 17 16:24:40 PDT 2013


On Thursday, 17 October 2013 at 23:14:51 UTC, anonymous wrote:
> On Thursday, 17 October 2013 at 22:50:22 UTC, ProgrammingGhost 
> wrote:
>> How do I find out if null was passed in? As you can guess I 
>> wasn't happy with the current behavior.
>>
>> Code:
>>
>> 	import std.stdio;
>>
>> 	void main() {
>>
>> 		fn([1,2]);
>> 		fn(null);
>> 		fn([]);
>> 	}
>> 	void fn(int[] v) {
>> 		writeln("-");
>> 		if(v==null)
>> 			writeln("Use default");
>> 		foreach(e; v)
>> 			writeln(e);
>> 	}
>>
>> Output
>>
>> 	-
>> 	1
>> 	2
>> 	-
>> 	Use default
>> 	-
>> 	Use default
>
> On Thursday, 17 October 2013 at 22:51:24 UTC, ProgrammingGhost 
> wrote:
>> Sorry I misspoke. I meant to say empty array or not null 
>> passed in. The 3rd call to fn is what I didn't like.
>
> null implicitly converts to []. You can't distinguish them in 
> fn.
>
> You could add an overload for typeof(null), but that only 
> catches the literal null, probably not what you'd expect:
>
> import std.stdio;
> void fn(typeof(null) v) {
> 	writeln("-");
> 	writeln("Use default");
> }
> void fn(int[] v) {
> 	writeln("-");
> 	foreach(e; v)
> 		writeln(e);
> }
> void main() {
> 	fn([1,2]);
> 	fn(null);
> 	fn([]);
> 	int[] x = null;
> 	fn(x);
> }
> ----
> -
> 1
> 2
> -
> Use default
> -
> -

Overloads are acceptable. But that behavior is odd although I do 
understand its being passed as value. I guess I have to suck it 
up and hope this behavior doesn't give me problems.


More information about the Digitalmars-d mailing list