自 使用“(list …)”和直接手写list哪种更好? 继续讨论:
一般把 "hello"
, '(1 2 3)
,[1 2 3]
等视作「常量」,它们只会初始化一次,会在不同的函数调用间共享,所以一般应该避免修改「常量」。下面是一个例外,故意利用这种特性,来计算一个函数被执行过的次数:
(defun foo ()
(let ((count '(0)))
(cl-incf (car count))))
(foo)
;; => 1
(foo)
;; => 2
(foo)
;; => 3
每次 foo
调用都会修改自己的定义(self-modifying code),可用 symbol-function
查看函数定义。
其它可能更好的办法是用全局变量和 lexical-binding/closure。