On Mar 5, 2021, at 3:08 PM, John Rose <john.r.r...@oracle.com> wrote:
> 
> s/when/&&/ is my proposal; then &&guard is the visual cue,
> and you can stack them.  (If you want || or ?:, you will need
> to use parens.)

The grammatical way to say this is that a switch case pattern can be optionally 
followed by && and then a ConditionalAndExpression whose form can’t be a||b but 
can be a&&b. 

An instanceof pattern has no such rule because as an expression it can be 
naturally followed by &&a which takes the role of a guard in that case. 

This makes me wonder: What happens when you stick &&a&b after a case? Well, 
that’s pretty simple; a and b must be boolean expressions. 

Here’s a better one:  What if you write x instanceof T t & q?  Of course q is 
an expression. If you dress up q to resemble a pattern you might have a nice 
puzzler. So how do I write it if I really want two patterns? Maybe we enlist 
parentheses?

I saved the best for last. What does this do?

x instanceof Integer t & t > 0

The answer indicates that users of patterns will have to be on their toes about 
the difference between & and &&. This makes me feel more confident about using 
bot & and && for syntax distinctions, as an approximation to overloading simple 
& for both patterns and guards. && is really a pattern breaker whereas & is a 
pattern continuer. 





Answer to puzzler:t can only be flow-scoped after && not &. 

Reply via email to