我正在编写一个 emacs 主模式,它使用缓冲区局部变量来存储一些状态:
(defun foo-mode ()
"My nice major mode"
(interactive)
(kill-all-local-variables)
(setq mode-name "foo")
(setq major-mode 'foo-mode)
(set (make-local-variable 'foo-state) "bar"))
(defun foo-change-state ()
(setq foo-state "baz"))
这工作得很好,并且具有在任何不使用我的主要模式的缓冲区中,foo-state
变量没有绑定的属性(在我看来这是一件好事,因为它避免了符号表的混乱)。
但是,对这样一段代码进行字节编译会产生以下警告:
Warning: assignment to free variable `foo-state'
using消除了警告,但具有现在无处不在defvar
的副作用,这在我看来是不可取的。foo-state
有没有办法摆脱警告,同时仍然不绑定每个缓冲区中的特定于模式的变量?或者当我认为这些变量不应该全局声明时我错了?