On 6/23/2020 5:56 PM, Barry Warsaw wrote:
match: expression case arm1: pass case arm2: pass else: pass
nicely mirrors try/except and if/elif/else constructs so it looks quite natural.
Agreed as to the look of the form.
Some observations:
1. 'else' is equivalent of 'elif True', so two alternative keywords are not strictly needed. The proposal uses 'case _' as the parallel catchall to 'elif True'. If '_' were not otherwise being used as a wildcard, I might suggest that 'case' by itself be used to always match.
2. 'expression' is *not* a general statement, let alone a suite of such, and it is not natural in non-interactive code that the object resulting from an expression be magically captured to be *implicitly* referenced in later code (the patterns).
Even though match may be thought of as a type of multiple elifs, this has no parallel in if/elif/else statements. However, in try/except statements, raised exceptions *are* magically captured, to be *explicitly* referenced in 'except' tuples. 'Try' and 'match' both consist of a setup, multiple test:action pairs, and a default action. So a similar indent structure can easily seem appropriate.
3. A bonus of 'match' by itself is that re-based syntax colorizers, as in IDLE, could pretend that the keyword is 'match:' and avoid colorizing re.match, etc. Or a colorizer could check that 'match' is followed by ':'. Always colorizing 'case' seems like less of an issue as I think it is less common as a name.