Emacs lisp arasındaki setqve defvariçindeki fark nedir ?
Aynı sorunun ortak lisp sürümünü /programming/3855862 adresinde görüyorum . Elisp'te aynı mı?
Emacs lisp arasındaki setqve defvariçindeki fark nedir ?
Aynı sorunun ortak lisp sürümünü /programming/3855862 adresinde görüyorum . Elisp'te aynı mı?
Yanıtlar:
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.
defvarsetq daha çok fonksiyonel programlama dillerinde (dinamik / sözcüksel kapsam belirleme kuralı etkin) bağlı olarak izin verilen bir bağlama gibidir. .......)
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.
M-x report-emacs-bugbaşkalarının daha kolay olmasına yardımcı olabilecek iyileştirmeler önermeniz yararlı olabilir.