collectExceptionMsg and emptyExceptionMsg
Jonathan M Davis
jmdavisProg at gmx.com
Wed Apr 18 15:14:58 PDT 2012
On Wednesday, April 18, 2012 23:52:29 Andrej Mitrovic wrote:
> On 4/18/12, Jonathan M Davis <jmdavisProg at gmx.com> wrote:
> > that is null == "".
>
> Wow, I don't understand this, why is comparison with null allowed with
> the equals operator for strings?
>
> import std.stdio;
>
> class Foo { }
> void main()
> {
> Foo foo;
> writeln(foo == null); // compile error, as it should be
> writeln("" == null); // true (why is this allowed?)
> writeln("" is null); // false
> }
>
> Shouldn't the second call be illegal? That would remove ambiguities
> between null strings and empty strings afaict.
It's allowed for arrays in general. Any array whose length is zero is equal to
another array whose length is zero, and null arrays have a length of 0. [] is
actually identical to null (though "" isn't). So, null == "" works and is
true. Personally, I think that it's a serious design flaw in the language - I
think that null and empty are two different concepts which should never be
conflated - but that's not how it works. Unfortunately, there's really no
chance that that's going to be changed at this point.. Here's a related
enhancement request:
http://d.puremagic.com/issues/show_bug.cgi?id=6346
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list