On 2016-11-02 16:17, Nick Coghlan wrote:
[snip]
Yeah, and so far the protocol based alternative I'm working on hasn't
been any less headache-inducing (Mark has been reviewing some early
iterations and had to draw a diagram to try to follow the proposed
control flow).

I think I have a way to simplify that idea further though, and if that
works out I should have something I'm willing to share with a wider
audience.

The gist is that rather than writing the bare:

    target = expr1 ?? expr2 ?? expr3

You'd instead write None-coalescing as:

    target = exists(expr1) ?? exists(expr2) ?? expr3

and None-propagating as:

    target = missing(expr1) ?? missing(expr2) ?? expr3

with ?? being a protocol-driven short-circuiting binary operator
controlled by the left operand rather than defining any particular
semantics of its own.

The "obj?." and "obj?[]" would then be shorthand for particular uses
of "missing(obj) ?? ..." that avoid duplicate evaluation of the left
operand (as well as bypassing the overhead of actually creating a
"missing" instance).

How about borrowing from C:

    target = expr1 || expr2 || expr3
    target = expr1 && expr2 && expr3

except that only None would be considered falsey?

Or would that be confusing?

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to