> De: "Guy Steele" <[email protected]>
> À: "Alan Malloy" <[email protected]>
> Cc: "Remi Forax" <[email protected]>, "amber-spec-experts"
> <[email protected]>
> Envoyé: Lundi 7 Septembre 2020 17:51:06
> Objet: Re: Is case var(var x, var y) a valid syntax ?
> I agree with Alan. While I believe that Rémi is correct insofar as you can
> write
> “var” in place of a type in any type pattern “T x”, in a deconstruction
> pattern
> “P(...) [d]” the occurrence of P is not a type; rather, it names a
> deconstructor. It does so happen that right now all deconstructors (like all
> constructors) share the name of an associated type, but it is important not to
> confuse them. You cannot replace a deconstructor name with “var” any more than
> you can write “new var()” or “new MyInterface()”.
hum, technically you can write
new MyInterface() { ... }
I disagree with that rational because a deconstructor is an instance method, so
you need to do an instanceof first,
said differently P(...) is a deconstruction pattern which is equivalent to
instanceof P p && var values = p.__name_of_the_deconstructor()
> From Brian,
> There are about a zillion places where you can use types and can’t use var:
> array elements, import statement, type parameters, etc. this is just one of
> those.
There is a good reason to not use var for all of them, i believe.
> —Guy
Rémi
>> On Sep 7, 2020, at 5:36 AM, Alan Malloy <[email protected]> wrote:
>> I would be very surprised if that were valid. The inner vars are fine, of
>> course. However, your outer one has not replaced a type, but a deconstructor
>> reference, or whatever we're calling the opposite of a constructor. "Any
>> object
>> which can be deconstructed into two constituent objects" will surely not be a
>> useful query very often, and I wouldn't expect the language to support it.
>> On Mon, Sep 7, 2020, 1:24 AM Remi Forax < [ mailto:[email protected] |
>> [email protected] ] > wrote:
>>> Just a question,
>>> do we agree that the syntax below is valid ?
>>> Point point = ...
>>> switch(point) {
>>> case var(var x, var y): ...
>>> }
>>> i.e. that var can be written everywhere there is a type in a Pattern.
>>> Rémi