Setq ve defvar arasındaki fark nedir


Yanıtlar:


18

Sen gerektiğini emacs'ı sormak bu soruyu: C-h i(elisp kılavuzu seçin m Elisp) ve "defvar" için dizini arar ( i defvar). Bu sizi Değişkenleri Tanımlama düğümüne götürür .

Emacs, defvarbir doc dizesinin eklenmesine izin verdiğini ve değişkenin zaten bir değeri varsa, hiçbir şey yapmadığını söyler .

Aynı zamanda kullanımı hakkında size söyler defvarhiçbir değer atanacak ile: (defvar foo). Bu değişkenin dinamik olarak kapsamlandığını bildirir .

setq bu özelliklerin hiçbirine sahip değil.

defvarve setqEmacs Lisp ve Common Lisp'de benzer, ama aynı değil.

Daha fazlasını öğrenmek için daha fazlasını okuyun.


1
Aslında defvar, verilen bir değer varsa "dinamik kapsam belirleme" de bildirir ve değişken zaten bir değere sahip olsa bile bu doğru kalır. OTOH "değişken zaten bir değere sahipse hiçbir şey yapmaz" defvar'ın tüm geçerli kullanımları için doğrudur (ve bytecompiler kalan durumlarda bir uyarı yayınlamalıdır, yani ilk kullanımdan sonra bir değişken bildiriliyorsa).
YoungFrog

yani defvarsetq daha çok fonksiyonel programlama dillerinde (dinamik / sözcüksel kapsam belirleme kuralı etkin) bağlı olarak izin verilen bir bağlama gibidir. .......)
nicolas

@nicolas: Lütfen kılavuzu okuyun. setqvar (oluşum) yerel olup olmadığına bakılmaksızın bir var değeri ayarlar. defvarbir değişkeni global olarak bildirir. ("Buffer-local" da olabilir local-variable-p:.) Bir işlev argümanı olarak ya da tarafından bağlanan bir değişken oluşumu letolağan anlamda "local" dır. letVb. İle bağlı bir değişken global (veya buffer-local) ise, bunun süresi boyunca / kapsamı için yerel bir bağ (olağan anlamda) oluşturulur let. Bu bağlama kapsamı içinde setqyerel değeri değiştirir. Bu bir var hakkında konuşmak daha iyidir oluşum öylesine olmak var daha (yığın) yerel olmak ya da (yığın) küresel.
Drew

1
@nicolas: Okumak ve tekrar okumak için zaman ayırın. Bazen söyledikleri kesin, ancak resmi bir şartname gibi kavramak zordur. Bir kez elde ettikten sonra, M-x report-emacs-bugbaşkalarının daha kolay olmasına yardımcı olabilecek iyileştirmeler önermeniz yararlı olabilir.
Drew

1
@nicolas: Öbek üzerindeki bir değişkeni (genel veya arabellek-yerel değişken olarak da bilinir) anlayarak başlayın . Muhtemelen gerçek yerel değişkenleri, yani yığındaki değişkenleri zaten anlıyorsunuz . Google çalışanları da yardımcı olabilir.
Drew
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.