On Monday, 27 August 2018 at 14:11:32 UTC, SG wrote:
On Monday, 27 August 2018 at 13:02:28 UTC, rikki cattermole
wrote:
So Nullable in D and C# is basically the same except C#'s has
language support.
The big difference is that in there I could do:
int? i = null;
string j = null;
var k = null;
and test all like:
i == null;
j == null;
k == null;
but in D:
Nullable!int i;
auto j = null;
string k = null;
writefln("%s", i.isNull); // I need to invoke Nullable
property isNull;
writefln("%s", i == null); // I can't just do this.
writefln("%s", j == null);
writefln("%s", k == null);
I hear you. IMO Nullable should be modified a bit to serve the
purpose of turning non-nullable types in to nullable types and
only that (right now it's confusing itself with an optional
type). Then we could implement opEquals(typeof(null)) so that
nullable == null would work.
I.e.
struct Nullable(T) {
static if (isPointer!T) {
private PointerTarget!T _value = PointerTarget!T.init;
} else {
private T _value = T.init;
}
bool opEquals(typeof(null)) {
return isNull;
}
}
Then Nullable!(int*) would be the same as int*. Or even better
maybe is to give a compiler error when you try and stuff a
nullable type inside a Nullable. Because ... why?
Cheers,
- Ali