On 21/01/2021 19:19, Brian Goetz wrote:
While I'll take the agreement, I must point out that we haven't ditched the "subtle type dependency."  We would still use totality to determine whether null is matched or not; what this gives us is the ability to opt out of matching null in those cases by saying "but not nulls, please."  The action-at-a-distance is still there, but we can control it locally if we don't like it.

I see - thanks for explaining. I thought for a moment that the proposal implied having type test patterns matching nulls, but I now realize that I have read too much between the lines.

Maurizio


On 1/21/2021 2:15 PM, Maurizio Cimadamore wrote:
This seems a very nice twist - while slightly more verbose, what we get back is that patterns "say what they mean", and there's no subtle type dependency analysis which determines the fate of null. This had me a bit worried, since this creates an action-at-a-distance between the type of the target expression and the selected semantics of a match expression - which is not unlike when we have overload resolution depending on the results of type inference (albeit to a lesser degree).

Maurizio

On 21/01/2021 18:52, Brian Goetz wrote:
Here's what is new: the treatment of guards as composable patterns. With that, we can write a "non-nullable" nested pattern like:

    case Foo(Object o & false(o == null)):

or

    case Foo(Object o) & false(o == null):

Reply via email to