Open
Description
Use uninterned symbols in expanded let-forms of macros if the values of these symbols are for macro-internal use only.
;; bad:
(defmacro i-interned (&rest body)
(declare (debug (body)))
`(let ((i 1))
(progn
(message "Macro internal value of i: %s" i)
,@body)))
;; good:
(defmacro i-uninterned (&rest body)
(declare (debug (body)))
(let ((i (make-symbol "i")))
`(let ((,i 1))
(progn
(message "Macro internal value of i: %s" ,i)
,@body))))
(let ((i 0))
(i-interned
(message "Value of i: %s" i)))
(let ((i 0))
(i-uninterned
(message "Value of i: %s" i)))
Output in the *Messages* buffer:
Macro internal value of i: 1
Value of i: 1
Macro internal value of i: 1
Value of i: 0
Metadata
Metadata
Assignees
Labels
No labels