[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Two questions about generalized variables
From: |
Michael Heerdegen |
Subject: |
Re: Two questions about generalized variables |
Date: |
Sun, 21 Feb 2016 14:34:05 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.0.91 (gnu/linux) |
Eric Abrahamsen <eric@ericabrahamsen.net> writes:
> It looks like plist-get doesn't return a setf-able place.
But `symbol-plist' has a gv-expander and refers to an alist.
`alist-get' has a gv-expander, too. So i think you would end up with
something like
(setf (alist-get key (symbol-plist 'symbol)) value)
I think.
> The second question is setting hashtable entries. Right now I have code
> like this:
>
> (setf (gethash uuid my-hashtable)
> (append (list (list 'thingone 'thingtwo))
> (gethash uuid my-hashtable)))
Isn't that more or less `push'?
> I assume this is no more or less efficient than let-ting the gethash,
> manipulating the value, then using puthash to put it back in. Now I've
> written this:
> [corrected version from the second message]
> (cl-symbol-macrolet ((entry (gethash uuid my-hashtable)))
> (setf entry (append (list (list 'thingone 'thingtwo))
> entry)))
>
> This is a simplistic example, but -- is this actually going to be any
> faster or more efficient than the first version? Does it only access
> the hashtable once?
`push' with `gethash' and the above code expand more or less to the
same. And I think this must access the hash-table twice: once
`gethash', and once `puthash'.
Michael.