Null-Coalescing Operator and Extensions

SG s at g.com
Mon Aug 27 14:59:20 UTC 2018


On Monday, 27 August 2018 at 07:59:17 UTC, Simen Kjærås wrote:
> That's the null propagation operator (?.). What SG asked for is 
> the null-coalescing operator (??). Of course, this can also be 
> implemented in D (albeit with a slight more horrible syntax):

Exactly, and I know it is an example, but it doesn't work for 
Variant.

I was trying something like below, I need to find a way to test 
for all Nullable types out there, right now only works for 
Nullable!int.


import std.stdio, std.typecons, std.variant, std.conv;

void foo(T, U...)(T t, U u) if (is(T == Nullable!U) )  {
     if(t.isNull){
         writeln(u);
         return;
     }
     writeln(t);
}

void foo(T, U...)(T t, U u) if (!is(T == Nullable!U) ){
     if(t == null){
         writeln(u);
         return;
     }
     writeln(t);
}

class C {
     Nullable!int m;
}

void main(){
     Nullable!int i;
     auto j = null;
     string k = null;
     Variant l = null;
     C c = new C();

     writefln("%s", i.isNull);
     writefln("%s", j == null);
     writefln("%s", k == null);
     writefln("%s", l == null);
     writefln("%s", c.m.isNull);

     i.foo(1);
     j.foo(2);
     k.foo(3);
     l.foo(4.3);
     c.m.foo(5);
}


More information about the Digitalmars-d-learn mailing list