On Wed, Mar 20, 2024 at 8:30 PM Rowan Tommins [IMSoP]
<[email protected]> wrote:
>
>
>
> On 20 March 2024 12:51:15 GMT, Robert Landers <[email protected]>
> wrote:
>
> >Oh and there isn't any difference between:
> >
> >$x as ?Type
> >
> >or
> >
> >$x as Type|null
>
>
> I'm not sure if I've misunderstood your example, or you've misunderstood mine.
>
> I'm saying that this should be an error, because the value is neither an
> instance of Foo nor null:
>
> $a = 42;
> $b = $a as Foo|null;
>
> Your earlier example implies that would make $b equal null, which feels wrong
> to me, because it means it wouldn't match this:
>
> $a = 42;
> $b = $a as Foo|Bar;
>
> If we want a short-hand for "set to null on error" that should be separate
> from the syntax for a nullable type.
>
>
> Regards,
> Rowan Tommins
> [IMSoP]
Interesting. I'm not sure there's a better way to say "set to null on
error" since it would be barely sensical to give a nullable type on
the right hand side anyway; so we might as well use it. In other
words, I can't think of a case where you'd actually want a Type|null
and you wouldn't have to check for null anyway.
If you think about it, in this proposal, you could use it in a match:
// $a is TypeA|TypeB|null
match (true) {
$a as ?TypeA => 'a',
$a as ?TypeB => 'b',
$a === null => 'null',
}
No matter what, you're going to have to check for null if you want to
handle all cases and throwing an error when you ask for a nullable
type would render a ton of utility moot (i.e., this match statement
wouldn't work). It's probably better to say, "I want what is on the
right-hand side of `as` or an error." Including `null` in that type
seems to be that you would get null if no other type matches, since
any variable can be `null`.
Robert Landers
Software Engineer
Utrecht NL