help-gnu-emacs
[Top][All Lists]
Advanced

[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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]