バッファローカル変数を再びグローバルにする


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-localnotを使用しmake-local-variableます。
Malabarba 2014年

回答:


12

@Malabarbaからのコメントが問題を説明しています。

kill-local-variable バインディングのローカル変数を取り除きます。しかし、あなたの場合、変数はどのバッファでも自動的にローカルになるため、値を再割り当てすると、その値はローカルになります。

申し訳ありませんが、シンボルでmake-variable-buffer-local使用する以外、対抗する方法はありませんunintern。(makunbound助けにはなりません。)

uninternを使用している場合は、問題ありません。ただし、非抑止によりシンボルは完全に削除されるため、変数以外の何かにシンボルを使用した場合、悪影響が生じる可能性があることに注意してください。

したがって、私が持っている唯一の答えはunintern、変数を使用して、必要な値に再割り当てすることです。これはグローバル値になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.