[Python-Dev] Re: PEP 622: Structural Pattern Matching

2020年6月24日 16:44:10 -0700

[Tim]
>> ".NAME" grated at first, but extends the idea that dotted names are
>> always constant value patterns to "if and only if". So it has mnemonic
>> value. When context alone can't distinguish whether a name is meant as
>> (in effect) an lvalue or an rvalue, no syntax decorations can prevent
>> coding errors. Names in destructuring constructs are overwhelmingly
>> intended as lvalues, so adding extra cruft to say "no, I meant rvalue"
>> is the pragmatic choice.
[Glenn Linderman <[email protected]>]
> This is just a bunch of words to me, without meaning.
>
> I'd like to understand it.
Did you read the PEP?
> What do you mean by "the idea that dotted names are always constant
> value patterns"?
Under the PEP's "Constant Value Pattern" section:
 Every dotted name in a pattern is looked up using normal Python
 name resolution rules, and the value is used for comparison by
 equality with the matching expression (same as for literals).
That's what I meant. "Contains a dot" implies "constant value pattern".
> What do you mean by 'extends (the above) to "if and only if" '?
Because the next sentence from the PEP:
 As a special case to avoid ambiguity with name patterns, simple
 names must be prefixed with a dot to be considered a reference:
completes turning "contains a dot" into a necessary and sufficient
("if and only if") condition for distinguishing a constant value
pattern from a name pattern. Where "constant value pattern" and "name
pattern" are again used with the PEP's meanings.
> As a result of not understanding the above, I see no mnemonic value.
While I do. "If I want `xyz` to be interpreted as a constant value
pattern, it needs to contain a dot: `.xyy` should do it. If I want
`enums.HI` to be interpreted as a constant value, it already contains
a dot, so it will be."
> My understanding of the "." as proposed is that it is optional, except
> in cases where it would be ambiguous... seems like it would be better if
> it were required for one case or the other, so that there would be no
> need to determine whether or not it is ambiguous by the surrounding
> state/code/declarations.
A dot is required, when and only when you want the chunk of syntax to
be interpreted as a constant value pattern. I said nothing at all
about "_leading_" dots, which appear to be all you have in mind there.
_Some_ dot is mandatory to make it a constant value pattern; a
_leading_ dot may or may not be required.
_______________________________________________
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/YEUQNW5NUAW2OGMRJN22G3JMSIB4PA4J/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to