Arabellek-yerel değişkeni tekrar global hale getirin


12

Yerel değişkenleri deniyordum ve ayarladım:

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

Daha sonra programımı kullanarak genel bir değişken kullanacak şekilde yeniden tasarladım:

(defvar foo nil "Not buffer local foo")

ancak değişken hala yerel olarak tamponludur ve hatta (kill-local-variable 'foo)onu öldürmedi.

Temel olarak, nasıl "geri alabilirim" make-local-variable?


1
Sadece FWI, defvar-yerel kullanımlar make-variable-buffer-localdeğil make-local-variable.
Malabarba

Yanıtlar:


12

@Malabarba'nın yorumu sorununuzu açıklıyor.

kill-local-variable gelmez bağlayıcı yerel değişkenin kurtulmak. Ancak, sizin durumunuzda, değişken herhangi bir arabellekte otomatik olarak yerel olduğundan, bir değeri yeniden atadığınızda, bu değer yereldir.

AFAIK, sembol üzerinde make-variable-buffer-localkullanmak dışında, karşı koymanın bir yolu yoktur unintern. ( makunboundyardımcı olmaz.)

Eğer unintern kullanıyorsanız o zaman sorun yok. Ancak, uninterning'in sembolü tamamen kaldırdığını unutmayın, bu yüzden sembolü bir değişkenin yanı sıra başka bir şey için kullandıysanız, olumsuz sonuçlar ortaya çıkabilir.

Bu yüzden tek cevabım uninterndeğişkeni kullanmak ve daha sonra istediğiniz değeri yeniden atamaktır - bu küresel bir değer olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.