[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: plist-put: destructive?
From: |
Eric Abrahamsen |
Subject: |
Re: plist-put: destructive? |
Date: |
Sat, 21 Jan 2017 16:50:53 -0800 |
User-agent: |
Gnus/5.130014 (Ma Gnus v0.14) Emacs/26.0.50 (gnu/linux) |
Drew Adams <drew.adams@oracle.com> writes:
>> Thanks to you both. I'm working with existing plists, so I'll drop
>> the setqs, that's a relief.
>
> Why is it a relief - a relief from what? What if something reset your
> "existing plist" to nil behind your back?
The code I'm working has many repeated clauses looking like:
(when thing1
(setq the-plist (plist-put the-plist :thing thing1)))
A little more complicated than that, but there will be like seven of
those in a row. Probably I should just write myself a custom
bulk-conditional-plist-setter macro, probably using the gv setter, but
for the time being just being able to remove all the "(setq the-plist"
makes everything easier to read.
> Setting (again) a variable whose value is an object to which you've
> applied a destructive operation is the standard idiom. And it is good
> programming practice. It ensures that your code does what you expect,
> regardless of the object value, or rather, regardless of the effect of
> the operation.
>
> You naturally think of your variable as always pointing to the object that
> you expect. To keep this relationship, you must set the variable to the
> return value of any destructive operation.
>
> This is true for a possibly "destructive" operation on any kind of object.
> The poster-child case is a list. See, for example, (elisp) `Rearrangement'
> (http://www.gnu.org/software/emacs/manual/html_node/elisp/Rearrangement.html).
>
> The point is that your variable is otherwise not guaranteed to
> continue to point to the object that you think it does. You need to
> set it to the _result_ of the possibly destructive operation (the
> return value), if you really want the variable to take the effect of
> that operation into account.
>
> This is all about the difference between a variable and its object value.
I understand the difference, but in this particular case I'm willing to
drop the setqs.
Eric
- plist-put: destructive?, Eric Abrahamsen, 2017/01/20
- Re: plist-put: destructive?, tomas, 2017/01/21
- Re: plist-put: destructive?, Stefan Monnier, 2017/01/21
- Re: plist-put: destructive?, tomas, 2017/01/21
- Re: plist-put: destructive?, Eric Abrahamsen, 2017/01/21
- Re: plist-put: destructive?, Stefan Monnier, 2017/01/22
- Re: plist-put: destructive?, Eric Abrahamsen, 2017/01/22
- Re: plist-put: destructive?, tomas, 2017/01/23
- Re: plist-put: destructive?, Stefan Monnier, 2017/01/21
- Re: plist-put: destructive?, Eric Abrahamsen, 2017/01/22