Is case var(var x, var y) a valid syntax ?

Brian Goetz brian.goetz at
Sun Sep 13 18:30:45 UTC 2020

>      So I’m not sure how much we can learn from this particular
>     example.  Maybe you have a better one?
> No a better one, just another one, you want to be able to declare a 
> deconstructor abstract by example on an interface
> interface Map {
>   interface Entry<K,V> {
>     public abstract deconstructor Entry(K key, V value);
>   }
> }

Yes, valid goal, but now you're getting ahead of the story.  There is a 
plan for the "instance method analogue" of pattern declarations, but 
it's not called a "deconstructor", any more than a method is not called 
a constructor.

The basic story is:
  - patterns are declared as members
  - some patterns are static (Optional.of(var x)), some are instance 
(Map.contains(k, var value)), and some are the same weird mix that 
constructors are (deconstructors)
  - Deconstructors are total (they deconstruct only), but the others are 
partial (they ask a question)

Right now, we're looking only at the simplest kind of declared pattern 
-- deconstructors -- and building from there.

> ...
> for(Map.Entry<String, String>(var key, var value) : entries) {
>   ...
> }
> BTW, it's also an example where 'var' can be useful instead of having 
> to specify the full type
> for(var(var key, var value) : entries) {
>   ...
> }

> I get that you can write the code like this if baseSalary is declared 
> private in Employee
> class VP extends Employee {
>    int bonus;
>    deconstructor VP(int salary) {
>      super(var baseSalary) = this;
>      return (baseSalary + bonus);
>   }
>  }
> still, a deconstructor is unlike a constructor because you can call a 
> constructor directly something you can not do with a deconstructor.

You cannot call a constructor directly either!  You execute a "new" 
operation, which has multiple consequences, only one of which is calling 
the constructor to fill in the state of the object.  The same is true 
with deconstructors -- you do a pattern match, which, under the right 
circustances, causes the deconstructor to be called.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the amber-spec-experts mailing list