digitalmars.D.learn - How to check if something can be null
- Antonio (38/38) Jul 01 2022 I has been using this pattern each time something needs special
- Antonio (5/7) Jul 01 2022 I realized Json is an struct (not an object)... and I supose, it
- user1234 (8/15) Jul 01 2022 Something like this does the job:
- Adam D Ruppe (4/6) Jul 01 2022 i'd prolly check `static if(is(typeof(null) : T))` which means if
- Antonio (4/10) Jul 01 2022 love it X-) !!! may be this is the Swiss knife I was waiting
I has been using this pattern each time something needs special
treatment when it can be null:
```d
void doSomething(T)(T v)
{
import std.traits: isAssignable;
static if( isAssignable!(T, typeof(null))) {
if(v is null)
writeln("This is null");
else
writeln("This is not null");
} else {
writeln("This can't be null");
}
}
```
and then
```d
void main(){
// output: This is null
doSomething!string(null);
// output: This is not null
doSomething("Hello");
// output: This can't be null
soSomething!int(1);
}
```
Problem appears with `vibe-d` `Json`.
```d
void main(){
doSomething!Json(null);
}
```
Compiler outputs
`Error: incompatible types for `(v) is (null)`: `Json` and
`typeof(null)`
-Why?
-Whats the correct whay to test if something can be null?
Jul 01 2022
On Friday, 1 July 2022 at 13:48:25 UTC, Antonio wrote:-Why?I realized Json is an struct (not an object)... and I supose, it is managing null asignation manually (as a way to build Json(null)).-Whats the correct whay to test if something can be null?That's my question :-p
Jul 01 2022
On Friday, 1 July 2022 at 13:53:28 UTC, Antonio wrote:On Friday, 1 July 2022 at 13:48:25 UTC, Antonio wrote:Something like this does the job: ```d enum canBeNull(T) = is(typeof({T t; t = null;})); static assert(canBeNull!(Object)); static assert(!canBeNull!(int)); ``` and that should handle opAssign and opCmp overloads.-Why?I realized Json is an struct (not an object)... and I supose, it is managing null asignation manually (as a way to build Json(null)).-Whats the correct whay to test if something can be null?That's my question :-p
Jul 01 2022
On Friday, 1 July 2022 at 13:48:25 UTC, Antonio wrote:I has been using this pattern each time something needs special treatment when it can be null:i'd prolly check `static if(is(typeof(null) : T))` which means if the null literal implicitly converts to type T. there's also the bludgeon __traits(compiles, v is null) too lol
Jul 01 2022
On Friday, 1 July 2022 at 15:35:00 UTC, Adam D Ruppe wrote:On Friday, 1 July 2022 at 13:48:25 UTC, Antonio wrote:Perfect!!! Thanks Adam.I has been using this pattern each time something needs special treatment when it can be null:i'd prolly check `static if(is(typeof(null) : T))` which means if the null literal implicitly converts to type T.there's also the bludgeon __traits(compiles, v is null) too lollove it X-) !!! may be this is the Swiss knife I was waiting for...
Jul 01 2022









user1234 <user1234 12.de> 