Ikumi Keita <[email protected]> writes:
>>>>>> Ikumi Keita <[email protected]> writes:
>> My understanding of the last sentence is as follows:
> More straightforwad example is:
> ----------------------------------------------------------------------
> (setq foo 1) ; dynamic global binding without defvar.
> (let ((foo foo)) ; creates lexical binding on foo.
> (setq foo (1+ foo)) ; sets lexically bound value.
> (symbol-value 'foo)) ; accesses dynamically bound value.
> ; => 1
> ----------------------------------------------------------------------
> This is the meaning of
> ,----
> | Note that if ‘lexical-binding’ is in effect, this returns the
> | global value outside of any lexical scope.
> `----
> , I think.
I think you're right. This example:
--8<---------------cut here---------------start------------->8---
(setq foo 1) ; dynamic global binding without defvar.
(let (_)
(defvar foo) ; Mark foo as special
(let ((foo foo)) ; creates lexical binding on foo.
(setq foo (1+ foo)) ; sets lexically bound value.
(symbol-value 'foo))) ; accesses dynamically bound value.
; => 2
--8<---------------cut here---------------end--------------->8---
marks foo as special and symbol-value returns the value within the inner
let. I agree with Tassilo that the docs could be a bit more clear.
Best, Arash