使缓冲区局部变量再次成为全局变量


12

我正在尝试使用局部变量并进行设置:

(defvar-local foo nil "Buffer local foo")

后来我重新设计了程序以使用全局变量,而不是使用:

(defvar foo nil "Not buffer local foo")

但是该变量仍然是局部缓冲区,甚至(kill-local-variable 'foo)没有杀死它。

基本上,我该如何“撤消” make-local-variable


1
仅FWI,defvar-local make-variable-buffer-local不使用make-local-variable
马拉巴巴2014年

Answers:


12

@Malabarba的评论解释了您的问题。

kill-local-variable 确实摆脱了局部变量绑定。但是由于在您的情况下该变量在任何缓冲区中都是自动局部的,因此当您为其重新分配一个值时,该值就是局部的。

AFAIK,make-variable-buffer-local除了unintern在符号上使用之外,没有其他方法可以对付。(makunbound无济于事。)

如果您使用unintern,那就可以了。但是请记住,取消interinterning会完全删除该符号,因此,如果将符号用于变量之外的其他内容,则可能会产生负面影响。

因此,我唯一的答案是使用unintern该变量,然后将其重新分配为所需的任何值-这将是一个全局值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.