Re: How to check if value is null, today?

2021-10-15 Thread Steven Schveighoffer via Digitalmars-d-learn

On 10/15/21 6:39 AM, tastyminerals wrote:

On Thursday, 14 October 2021 at 12:43:36 UTC, jfondren wrote:



Do you have a complete example? Because this runs without error:





Steven Schveighoffer was correct, the error was caused by non explicit 
`someVar;` which had to be changed to `someVar.get;`.


As a note for future reference, as jfondren says it's always good to 
post the exact code that is failing, better yet a complete example we 
can run. Often times people (including myself and many long-time users) 
come here puzzled about some message, but we have focused our brain on 
something that we think is causing the problem, but it isn't. Just 
posting that small piece brings us into your focused confusion instead 
of really looking at the big picture ;)


-Steve


Re: How to check if value is null, today?

2021-10-15 Thread tastyminerals via Digitalmars-d-learn

On Thursday, 14 October 2021 at 12:43:36 UTC, jfondren wrote:
On Thursday, 14 October 2021 at 11:58:29 UTC, tastyminerals 
wrote:
Here is an example code that doesn't work with the new 
compiler anymore:


```
if (someValue.isNull)
```

Attempting to run the above throws:
```
Error: incompatible types for `(0) : (someValue)`: `int` and 
`Nullable!int`

```



Do you have a complete example? Because this runs without error:

```d
import std.typecons : nullable, Nullable;
import std.stdio : writeln;

void main() {
auto a = nullable(1);
auto b = Nullable!int.init;
if (!a.isNull)
writeln(a.get);
if (b.isNull)
writeln("b is null");
}
```


Steven Schveighoffer was correct, the error was caused by non 
explicit `someVar;` which had to be changed to `someVar.get;`.


Re: How to check if value is null, today?

2021-10-14 Thread Steven Schveighoffer via Digitalmars-d-learn

On 10/14/21 7:58 AM, tastyminerals wrote:
The new `DMD v2.097.2` deprecated implicit null conversions 
`std.typecons.Nullable!double.Nullable.get_`.


The deprecation warning tell you to `Please use .get explicitly.`.

Here is an example code that doesn't work with the new compiler anymore:

```
if (someValue.isNull)
```

Attempting to run the above throws:
```
Error: incompatible types for `(0) : (someValue)`: `int` and `Nullable!int`
```

I am not sure I understand what kind of `.get` overload are we supposed 
to use here. I tried to read the documentation but looks like it is yet 
to be updated.


Can somebody please help me out?


I think your expression is something more like:

```d
someValue.isNull ? 0 : someValue;
```

Due to the error message format. You need to call `get` explicitly to 
unwrap a Nullable now. So change it to:


```d
someValue.isNull ? 0 : someValue.get;
```

or even better:

```d
someValue.get(0);
```

which uses the default value of 0 if it's null.

-Steve


Re: How to check if value is null, today?

2021-10-14 Thread jfondren via Digitalmars-d-learn

On Thursday, 14 October 2021 at 11:58:29 UTC, tastyminerals wrote:
Here is an example code that doesn't work with the new compiler 
anymore:


```
if (someValue.isNull)
```

Attempting to run the above throws:
```
Error: incompatible types for `(0) : (someValue)`: `int` and 
`Nullable!int`

```



Do you have a complete example? Because this runs without error:

```d
import std.typecons : nullable, Nullable;
import std.stdio : writeln;

void main() {
auto a = nullable(1);
auto b = Nullable!int.init;
if (!a.isNull)
writeln(a.get);
if (b.isNull)
writeln("b is null");
}
```