SX'de tüm dokümanı ve bir sürü mesajı okuduktan sonra bile, arabellek-yerel değişkenlerin tüm varyasyonları hakkında net değilim.
İşte anlayışlarımın bir özeti:
(defvar foo ..)
dosya için dinamik bir değişken bildirir. Ancak, değişken (1) bir defvar
ifade içermedikçe diğer dosyalar tarafından bilinmemektedir ve (2) değişken, yerel olarak tampon değil, kapsam olarak globaldir.
(make-variable-buffer-local foo)
sonra defvar
yukarıda değişken foo ayarlandıktan her yerde tespit edildiğinde tampon-yerel olarak muamele etmek olduğunu derleyici ve herkes söyler. Bu nedenle, bu örüntü her iki ifadeyi dosyaya arka arkaya koyarak arabellek-yerel değişkeni bildirmek için iyi bir stildir.
(defvar xxx ...) ;declare xxx with global scope
(make-variable-buffer-local 'xxx) ;but now make it buffer-local everywhere
Kolaylık sağlamak için, (defvar-local xxx ...)
form yukarıdaki iki satır yerine bir satır olarak kullanılabilir:
(defvar-local xxx ...) ;make xxx buffer local everywhere
Yukarıdaki gibi bildirildikten sonra, xxx değişkeni setq deyimlerindeki diğer değişkenler gibi kullanılabilir.
Sadece bir global dinamik değişken olan bir arabellek-yerel değişkeninin tek bir örneğine sahip olmak istersem, aşağıdaki bildirimleri kullanırdım. Birincisi, global kapsam dinamik değişkenini bildirir ve ikinci deyim, geçerli tamponda bu değişkenin tampon yerel sürümünün yalnızca bir örneğini oluşturur:
(defvar xxx ...) ;declare xxx with global scope
(make-local-variable 'xxx) ;make xxx local in this buffer only
Şimdi benim açıklayıcı sorularım için (yukarıdakilerin hepsi, anlayışımın doğru olup olmadığı hakkında örtük sorulardı).
Değişkenlerin değerini ayarlarken setq
veya
tuşunu kullanabilirim setq-local
. Ne zaman setq-local
kullanılmalı? Neden?
setq-local
Buffer-local değişkenlerinde veya buffer-local değişkenlerinde kullanırsam ne olur ?
Is setq-local
a için gerekli defvar-local
bildirilen değişkenin?
Will setq-local
normal üzerinde defvar
bildirilen değişkenin bir tampon-yerel değişkene çevirmek? (Başka bir deyişle, bir setq-local
şekilde bir (make-variable-local xxx)
deklarasyona eşdeğer mi?
(setq-local VAR VALUE)
sadece kısayoldur (set (make-local-variable VAR) VALUE)
, ki bu ortak bir deyimdi (ve hala da).