不管争论是什么,它似乎根本没有做任何事情。它也不会以任何方式影响字节编译警告。如果根据其描述使用。有没有如何使用它的例子?
例如,下面的代码:
(defmacro deflocal (var &rest body)
(let ((symb var)
(val (car body))
(doc (cadr body)))
`(progn
(let ((byte-compile-warnings nil))
;; (byte-compile-disable-warning 'make-local)
(set (make-local-variable ',symb) ,val)
(put ',symb 'variable-documentation ,doc)
;; (byte-compile-enable-warning 'make-local)
))))
可以为所欲为byte-compile-warnings
,并且不会以任何方式影响编译器的输出(我仍然收到有关分配给自由变量的警告。
编辑:
因为这在我上面的描述中是不透明的。这就是为什么我不想使用defvar
. 我有一个交互式函数,它将启动某种交互式 shell,用于与 Emacs 外部的程序进行通信。这个 shell 可以由用户直接启动,也可以在进入几种不同的主要模式或执行一些其他任务(如编译、检查语法等)时间接启动。该系统相当复杂。
我多次遇到某些函数最终可能会在我不想要的缓冲区中设置变量。例如,当编译钩子调用一个假设它在拥有连接对象的缓冲区中被调用的函数时。连接可能会失败,因此系统会尝试自动恢复连接,一旦它发现由于任何原因失败(不幸的是,我必须连接的另一个程序非常不稳定并且它的通信设施实现不佳) . 因此,例如,如果 flymake 进程突然意识到它需要恢复连接,它将在 flymake 那时所在的任何缓冲区中创建它。同样,编译模式缓冲区、完成缓冲区、帮助缓冲区等。在这些背景变化之后很难理解。
现在,当我可以确定没有其他缓冲区会意外声明变量来引用连接对象,否则它会出错,我很安全,并且很容易调试和解决出现的问题。但是,一旦我使用defvar
,过了一段时间我意识到已经创建了一些胭脂重复的进程,我完全不知道是谁做的。