[Python-ideas] Match statement brainstorm
Michael Selik
michael.selik at gmail.com
Tue May 24 09:31:40 EDT 2016
On Tue, May 24, 2016 at 2:08 AM Greg Ewing <greg.ewing at canterbury.ac.nz>
wrote:
> > On Mon, May 23, 2016 at 7:57 PM, Michael Selik <michael.selik at gmail.com>
> wrote:
> >
> >>def demo(arg):
> >> if p, q ?= arg.x, arg.y: # dict structure
> >> elif x ?= arg.x and isinstance(x, int) # assignment + guard
> >> elif a, b, *_ ?= arg: # tuple structure
> >> elif isinstance(arg, Mapping): # nothing new here
>
> I'm unenthusiastic about this -- the above looks like
> an unreadable mess to me.
>
Which is unreadable: ``if/elif`` keywords or ``?=`` operator? If it's the
latter, please don't get hung up on that, as I intended that as a
placeholder for whatever operator or keyword is best. My main point is that
switch/case/matching is semantically identical to if/elif, so why use
something different?
> Some other worries:
>
> * It appears that this would have to work by means of
> exception-catching in the rhs, so it's really a
> disguised form of the except: expression proposal;
> is that intentional?
>
No. The exception-catching expression is not meant to be available in any
other context. However, exception-catching is an essential feature to
matching via destructuring. I believe it's unavoidable, though *which*
exceptions are suppressed could be made more clear.
* It could also be abused to get an assigment-in-
> expression anywhere you wanted. Such things have
> been rejected before; are we changing our mind
> on that?
>
No, using the assign-if-can operator would be syntax error outside of an
if/elif, the reverse of how an assign operator is a syntax error inside an
if/elif.
* THere would be no hope of checking for coverage
> of all cases in a static checker.
>
I believe you, though the logic isn't clear to me. Could you explain why?
> I feel like we've wandered a long way from the idea
> we started with, which is something to facilitate
> a Haskell-like case-analysis style of programming,
> and ended up with something much looser that tries
> to be all things to everyone.
>
That was not my intention. If the assign-if-can operation is only available
in an if/elif statement, I think it's exactly Haskell-like case-analysis
and nothing more. Did I miss something?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20160524/8c25e779/attachment.html>
More information about the Python-ideas
mailing list