GNU bug report logs -
#9469
buffer-local variables seem to remember previous values
Previous Next
Reported by: Le Wang <l26wang <at> gmail.com>
Date: Sat, 10 Sep 2011 17:12:01 UTC
Severity: normal
Tags: notabug
Done: Lars Magne Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
* Lars Magne Ingebrigtsen [2011-09-11 18:54] writes:
> Le Wang <l26wang <at> gmail.com> writes:
>
>>> This has nothing to do with the use of quote, but with the use of
>>> destructive functions (setcdr) on a shared data structure.
>>
>> Of course you're technically right, but should the manual mention in
>> the "quoting" section that using quote the way I did results in a
>> shared data structure? This part was surprising to me.
>
> If I read your code correctly, Andreas is correct and precise as usual,
> if a bit terse. :-)
>
> The thing you're seeing has absolutely nothing to do with the use of
> quote.
>
> You're destructively altering a single list and expecting to see the
> list be different in various buffers.
Well, quote is tricky! It wouldn't hurt to point out that modifying a
quoted list often means modifying your code. E.g.
(defun foo ()
(let ((list '(1 2 3)))
(setcdr list (cddr list))))
(equal (copy-tree (symbol-function 'foo))
(progn
(foo)
(symbol-function 'foo)))
returns nil. I think few beginners will see that using setcdr here not
only modifies the value stored in the variable list but also modifies
the s-exp stored in 'foo.
Helmut
This bug report was last modified 13 years and 307 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.