[Python-ideas] "Immutable Builder" Pattern and Operator
Soni L.
fakedme+py at gmail.com
Mon Jan 23 11:07:50 EST 2017
On 23/01/17 01:52 PM, Gerald Britton wrote:
>
>
>
> [snip]
>
> >I propose `x .= y` -> `x = x . y`, for any `y`.
>
> [snip]
>
> I think you mean "any y that is a member of x"
>
Since it desugars into `x = x.y`, you can literally use anything for `y`.
x .= __call__().whatever().unwrap() * 3
is equivalent to
x = x.__call__().whatever().unwrap() * 3
and
x .= 1
is equivalent to
x = x.1
which is equivalent to
SyntaxError: invalid syntax
> Also, note that this syntax means that x will be rebound to the
> result of calling x.y, whatever that is (frequently, None, for
> mutating methods)
>
> In general, you can't count on methods to return references to
> their instances, even though it's handy for fluent coding, so this
> side effect may be unexpected to some
>
This is why it's for use with **immutable** objects.
> That's a problem with your original example:
>
> >long_name = mkbuilder()
>
> >long_name = long_name.seta(a)
>
> >long_name = long_name.setb(b)
>
> >y = long_name.build()
>
> What do the methods seta and setb return? If they don't return
> "self" you've got a problem. I think.
>
They don't return self. Ever. The value bound to long_name is immutable,
like an integer. They return a new instance.
> FWIW why can't you just write:
>
> x.y
>
> or for your example:
>
> long_name.seta(a)
>
> ?
>
>
See the IRC bot builder example, it should be more clear. (It's about
forking the builder.)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20170123/a311abee/attachment.html>
More information about the Python-ideas
mailing list