Emacs lisp arasındaki setq
ve defvar
iç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 setq
ve defvar
iç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, defvar
bir 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 defvar
hiçbir değer atanacak ile: (defvar foo)
. Bu değişkenin dinamik olarak kapsamlandığını bildirir .
setq
bu özelliklerin hiçbirine sahip değil.
defvar
ve setq
Emacs Lisp ve Common Lisp'de benzer, ama aynı değil.
defvar
setq daha çok fonksiyonel programlama dillerinde (dinamik / sözcüksel kapsam belirleme kuralı etkin) bağlı olarak izin verilen bir bağlama gibidir. .......)
setq
var (oluşum) yerel olup olmadığına bakılmaksızın bir var değeri ayarlar. defvar
bir 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 let
olağan anlamda "local" dır. let
Vb. İ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 setq
yerel 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-bug
başkalarının daha kolay olmasına yardımcı olabilecek iyileştirmeler önermeniz yararlı olabilir.