Зробіть локальну змінну буфера знову стати глобальною


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 use make-variable-buffer-localnot make-local-variable.
Малабарба

Відповіді:


12

Коментар від @Malabarba пояснює вашу проблему.

kill-local-variable Чи позбутися локальної змінної зв'язування. Але оскільки у вашому випадку змінна автоматично є локальною у будь-якому буфері, коли ви присвоюєте їй значення, це значення є локальним.

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

Якщо ви використовуєте unintern, тоді ви все в порядку. Але майте на увазі, що безперебійне видалення символу взагалі видаляється, тому якщо ви використовували символ для чогось іншого, крім змінної, то це може мати негативні наслідки.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.