[Python-ideas] "Immutable Builder" Pattern and Operator
Wes Turner
wes.turner at gmail.com
Sun Jan 22 23:09:34 EST 2017
More information about the Python-ideas mailing list
Sun Jan 22 23:09:34 EST 2017
- Previous message (by thread): [Python-ideas] "Immutable Builder" Pattern and Operator
- Next message (by thread): [Python-ideas] "Immutable Builder" Pattern and Operator
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Sunday, January 22, 2017, Soni L. <fakedme+py at gmail.com> wrote: > > > On 22/01/17 10:03 PM, Wes Turner wrote: > > > > On Sunday, January 22, 2017, Wes Turner <wes.turner at gmail.com > <javascript:_e(%7B%7D,'cvml','wes.turner at gmail.com');>> wrote: > >> Have you looked at pyrsistent for immutable/functional/persistent/copy-on-write >> data structures in Python? >> >> https://github.com/tobgu/pyrsistent/ >> >> (freeze() / thaw()) >> >> ... e.g. List and Dict NamedTuple values are not immutable (because >> append() and update() still work) >> > > fn.py also has immutables: > https://github.com/kachayev/fn.py/blob/master/README.rst# > persistent-data-structures > > > You seem to be thinking of "immutable object builder". Not "the builder > itself is immutable and operations on it create new builders". > My mistake. Something like @optionable and/or @curried from fn.py in conjunction with PClass from pyrsistent may accomplish what you describe? > > > > >> >> On Sunday, January 22, 2017, Soni L. <fakedme+py at gmail.com> wrote: >> >>> I've been thinking of an Immutable Builder pattern and an operator to go >>> with it. Since the builder would be immutable, this wouldn't work: >>> >>> long_name = mkbuilder() >>> long_name.seta(a) >>> long_name.setb(b) >>> y = long_name.build() >>> >>> Instead, you'd need something more like this: >>> >>> long_name = mkbuilder() >>> long_name = long_name.seta(a) >>> long_name = long_name.setb(b) >>> y = long_name.build() >>> >>> Or we could add an operator to simplify it: >>> >>> long_name = mkbuilder() >>> long_name .= seta(a) >>> long_name .= setb(b) >>> y = long_name.build() >>> >>> (Yes, I'm aware you can x = mkbuilder().seta(a).setb(b), then y = >>> x.build(). But that doesn't work if you wanna "fork" the builder. Some >>> builders, like a builder for network connections of some sort, would work >>> best if they were immutable/forkable.) >>> _______________________________________________ >>> Python-ideas mailing list >>> Python-ideas at python.org >>> https://mail.python.org/mailman/listinfo/python-ideas >>> Code of Conduct: http://python.org/psf/codeofconduct/ >>> >> -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-ideas/attachments/20170122/73792a9d/attachment-0001.html>
- Previous message (by thread): [Python-ideas] "Immutable Builder" Pattern and Operator
- Next message (by thread): [Python-ideas] "Immutable Builder" Pattern and Operator
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-ideas mailing list