> On Aug 28, 2020, at 5:59 PM, [email protected] wrote:
>
> . . .
> Again, it should work like a cascade of if ... instanceof, so
> case Pixel(var x, var y, var color) -> color
> should be equivalent to
> if x instanceof Pixel p { yield p.color() }
But I do not believe that at all. I do believe that
case Pixel(var x, var y, var color) -> color
should be equivalent to
if x instanceof Pixel(var x, var y, var color) p { yield p.color() }
or, if you prefer, to
if x instanceof Pixel(var x, var y, var color) { yield color }
The point is that the switch label `case Pixel(var x, var y, var color)` does
not merely demand that the selector value be a Pixel; it demands that it be a
Pixel having a specific three-argument destructor. It can be equivalent only
to an instanceof expression that makes those same demands.
If you want a switch clause that is equivalent to
if x instanceof Pixel p { yield p.color() }
then you should write
case Pixel p -> p.color()