On Wed, Jun 24, 2020 at 3:49 PM Ethan Furman <[email protected]> wrote: > > On 06/23/2020 10:31 PM, Chris Angelico wrote: > > On Wed, Jun 24, 2020 at 3:21 PM Ethan Furman wrote: > >> 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. > > Well, your example isn't using leading dots like `.BLACK` is, and your > example isn't using `case _` as a final catch-all, and your example isn't > using "case some_name_here" as an always True match. In other words, your > example isn't talking about what I'm talking about. ;-) >
But it IS using "_" as a catch-all. The simple "case _:" case is using _ the same way that "case (Color.SCARLETT, _):" is. ChrisA _______________________________________________ Python-Dev mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/[email protected]/message/UGNM557U543RFPIOS2CCN7J3VVYIQ4SF/ Code of Conduct: http://python.org/psf/codeofconduct/
