emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

dynamic let closure not possible with `dlet', instead use lexical let an


From: Emanuel Berg
Subject: dynamic let closure not possible with `dlet', instead use lexical let and `setq'
Date: Fri, 05 Jan 2024 06:04:41 +0100
User-agent: Gnus/5.13 (Gnus v5.13)

1. You can't do a dynamic let closure with `dlet':

(dlet ((oh-ah "oa"))
  (defun ohah ()
    oh-ah)
  (declare-function ohah nil) )
;; (ohah) ; Symbol’s value as variable is void: oh-ah

2. You can do a lexical let closure with `let', but after that
   you cannot make any of its lexical variables dynamic with
   `dlet':
   
(let ((some-var 0))

  (defun outer ()
    (dlet ((some-var 1))
      (inner) ))
  (declare-function outer nil)

  (defun inner ()
    some-var)
  (declare-function inner nil) )

;; (outer) ; 0
;; (inner) ; 0

3. What you can do, is to keep the variable lexical and use it
   like a global variable with `setq':

(let ((some-var 2))

  (defun outer ()
    (setq some-var 4)
    (prog1
        (inner)
      (setq some-var 2) ))
  (declare-function outer nil)

  (defun inner ()
    some-var)
  (declare-function inner nil) )

;; (outer) ; 4
;; (inner) ; 2

-- 
underground experts united
https://dataswamp.org/~incal




reply via email to

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