On Wed, Jun 24, 2020 at 3:21 PM Ethan Furman
On 06/23/2020 09:01 AM, PEP 622 wrote:
from enum import Enum
class Color(Enum): BLACK = 1 RED = 2
BLACK = 1 RED = 2
match color: case .BLACK | Color.BLACK: print("Black suits every color") case BLACK: # This will just assign a new value to BLACK. ...
As others have noted, the leading dot to disambiguate between a name assignment and a value check is going to be a problem. I think it's also unnecessary because instead of
case BLACK: blahblah()
we can do
case _: # look ma! BLACK is just "color"! BLACK = color # if you really want it bound to another name
In other words, the PEP is currently building in two ways to do the same thing -- make a default case. One of those ways is going to be a pain; the other, once renamed to "else", will be perfect! :-) As a bonus, no special casing for leading dots.
But what if that's composed into something else? class Room(Enum): LIBRARY = 1 BILLIARD_ROOM = 2 ... match accusation: case (Color.SCARLETT, Room.BILLIARD_ROOM): print("Correct") case (Color.SCARLETT, _): print("Not there!") case (_, Room.BILLIARD_ROOM): print("Wrong person!") case (_, _): print("Nope. Just nope.") Without the dots, there's no way to tell whether you're matching specific values in the tuple, or matching by length alone and then capturing. You can't use the 'else' keyword for a partial match. ChrisA