Сделать локальную переменную буфера снова глобальной

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.
Малабарба

Ответы:

12

Комментарий @Malabarba объясняет вашу проблему.

kill-local-variable действительно избавляется от привязки локальной переменной. Но поскольку в вашем случае переменная автоматически является локальной в любом буфере, то при переназначении ей значения это значение является локальным.

AFAIK, нет способа противостоять make-variable-buffer-local, кроме как использовать uninternна символе. ( makunboundне помогает.)

Если вы используете Intern, то все в порядке. Но имейте в виду, что использование символа "без" приводит к удалению символа в целом, поэтому, если вы использовали символ для чего-то другого, кроме переменной, то это может привести к негативным последствиям.

Таким образом, единственный ответ, который у меня есть, - это использовать, uninternа затем переназначить переменную на любое значение, которое вы хотите - это будет глобальное значение.

Нарисовался
источник