Rendi nuovamente globale una variabile buffer-local


12

Stavo sperimentando variabili locali e ho impostato:

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

Successivamente ho riprogettato il mio programma per utilizzare una variabile globale usando invece:

(defvar foo nil "Not buffer local foo")

ma la variabile è ancora buffer locale e (kill-local-variable 'foo)non l'ha nemmeno uccisa.

Fondamentalmente, come posso "annullare" make-local-variable?


1
Solo FWI, defvar-local make-variable-buffer-localnon lo usa make-local-variable.
Malabarba,

Risposte:


12

Il commento di @Malabarba spiega il tuo problema.

kill-local-variable non sbarazzarsi della variabile locale vincolante. Ma poiché nel tuo caso la variabile è automaticamente locale in qualsiasi buffer, quando la riassegni un valore, quel valore è locale.

AFAIK, non c'è modo di contrattaccare make-variable-buffer-local, se non quello di usare uninternil simbolo. ( makunboundnon aiuta.)

Se usi unintern, allora stai bene. Ma tieni presente che il disinteresse rimuove del tutto il simbolo, quindi se hai usato il simbolo per qualcos'altro, oltre a una variabile, potrebbero esserci conseguenze negative.

Quindi l'unica risposta che ho è usare uninterne quindi riassegnare la variabile qualunque valore tu voglia - sarà un valore globale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.