On Mon, Oct 31, 2016, at 13:16, Guido van Rossum wrote:
> For "everything to the right" it would seem we have some freedom: e.g.
> if we have "foo.bar?.baz(bletch)" is the call included? The answer is
> yes -- the concept we're after here is named "trailer" in the Grammar
> file in the source code (
> and "primary" in the reference manual (
reference/expressions.html#). This primaries
> means all attribute references ("x.y"), index/slice operations
> ("x[...]"), and calls ("x(...)").
One thing that I think I touched on in an earlier iteration of this
discussion but hasn't been revisited is: what's the AST going to look
Right now, foo.bar.baz(bletch) is Call(Attribute(Attribute(Name(
'bar'), 'baz'), [Name('bletch')])), which is identical to
(foo.bar).baz(bletch) or (foo.bar.baz)(bletch). These are treated,
essentially, as postfix operators, where you can parenthesize any left
part of the expression and leave its meaning [and its AST] unchanged.
Is the AST going to be unchanged, leading to the conclusion that the
short-circuiting in (foo?.bar).baz will "reach outside of" the
parentheses, and relying on the fact that wanting to do that with None
is a silly thing to do in almost all cases? Or is there going to be a
new kind of AST that is sequential rather than recursive in how it
represents trailer/primary expressions?
Python-ideas mailing list
Code of Conduct: http://python.org/psf/