> On Aug 28, 2020, at 5:59 PM, fo...@univ-mlv.fr 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()