On 06/23/2020 10:11 PM, Ethan Furman wrote:
As others have noted, the leading dot to disambiguate between a name assignment and a value check is going to be a problem.
I suspect I wasn't as clear as I could have been, so let me try again (along with some thinking-out-loud...). First premise: the visual difference between BLACK and .BLACK is minuscule, and will trip people up. Second premise: there is no practical difference between match color: case BLACK: # do stuff and match color: case _: BLACK = color # do stuff Conclusion: there is no need for an always true match, since that's basically the same thing as an "else" (or "case _", currently). Since we don't need an always True match, we don't need to allow a single name after "case" as an assignment target, which means we don't need to support ".name" as a value target -- the plain name will work as a value target. Am I just stuck on the single-name scenario and missing the bigger picture? What happens here: aught = 0 match an_obj: case Point(aught, 6): # do stuff for the aught in Point to match the global aught it needs the dot prefix, doesn't it. But this is what guard clauses are for, right? aught = 0 match an_obj: case Point(x, 6) if x == aught: # do stuff So we still don't need a leading dot. Going back to the example and taking a different tack [1]: match color: case BLACK: # BLACK is the global variable is really the same as match color: case color == BLACK: We've been dropping the "color ==" part, but what if we only drop the "color" part? match color: case == BLACK: # comparing against the global variable and then match color: case BLACK: # always True match with `color` assigned to `BLACK` Equal signs are much easier to notice than a single dot. Okay, I've pretty much done a 180 here -- a bare name should be an assignment target, but instead of having a leading dot be the "this is really an existing variable switch", have an operator be that switch: ==, <, >=, etc. Of course "==" will be the most common, so it can be dropped as well when the meaning doesn't change in its absence (kind of like parentheses usually being optional). -- ~Ethan~ [1] https://en.wikipedia.org/wiki/Tack_(sailing)