Unfortunately there are millions of ideas. The PEP authors are taking the
dilemma seriously and we are deliberating what to do.

On Thu, Jul 2, 2020 at 4:04 PM Nick Coghlan <ncogh...@gmail.com> wrote:

> On Thu., 2 Jul. 2020, 11:18 am Guido van Rossum, <gu...@python.org> wrote:
>
>> On Wed, Jul 1, 2020 at 5:50 PM Nick Coghlan <ncogh...@gmail.com> wrote:
>>
>>> The key thing I'm hoping for in PEP 622 itself is that "Syntactic
>>> compatibility with a possible future enhancement to assignment
>>> statements" be considered as a constraint on the syntax for case
>>> patterns.
>>>
>>
>> That would certainly rule out ideas like writing stores as $x or x? or
>> <x> etc., since it would be syntactically incompatible with *current*
>> assignment statements.
>>
>
> Yeah, having stores be unmarked is perfectly consistent with existing
> assignment statements and expressions, so I now think the PEP is correct to
> propose that.
>
> However, the two parts of the match lvalue proposal that are a genuine
> problem from a syntactic consistency perspective are:
>
> * using "." to mark value constraints (already means attribute binding in
> assignment lvalues)
> * using "_" to mark wildcard placeholders (already means a normal variable
> binding in assignment lvalues)
>
> The conclusion I came to from that observation was that to allow for
> potential future syntactic consistency, it isn't variable bindings that
> need a symbolic prefix in match lvalues, it's value constraints.
>
> That then leads to the idea of using "?" as a general "value constraint"
> marker in match expressions:
>
> * bare "?": wildcard placeholder that allows any value without binding it
> * prefix "?": constrains the value in that position without binding it
> * infix "?": imposes a value constraint on a value that is being bound to
> a name (means the walrus matching pattern is only needed in cases where a
> value is being both bound and deconstructed - simple cases would be written
> like "name?None" rather than "name:=None")
>
> With this spelling, the named value constraint example from the PEP would
> look like this (with an extra case added showing infix value constraints):
>
> ===
> match color:
>     case (primary?GREEN, highlights?BLUE):
>         print("Two tone, huh? Nice!")
>     case ?BLACK | ?Color.BLACK:
>         print("Black suits every color")
>     case BLACK: # This will just assign a new value to BLACK.
>         ...
> ===
>
> I'll note that adopting this approach would likely mean that "?0",
> "?None", etc would qualify as legal value constraints, so a separate
> decision would need to be made if it was allowed to omit the prefix for
> literal constraints on values that weren't being bound to a name.
>
> A decision would also need to be made on whether the RHS of "?"
> constraints was permitted to be a full expression or not (e.g. if function
> calls were allowed, I believe there would be significant potential for
> confusion with class constraints).
>
> Cheers,
> Nick.
>
>>
>
>>

-- 
--Guido van Rossum (python.org/~guido)
*Pronouns: he/him **(why is my pronoun here?)*
<http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/>
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/BWG5N23WBPFDEORGPK43R7N4A6KBRLV6/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to