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

Reply via email to