Neden setq ve set quote sözcüksel kapsamı olan izin verilen değişkenler üzerinde farklı davranır?


14

Sonunda setbeklediğim gibi çalışmama neden olduğu ortaya çıktı uzantılarımdan birinde bir hata vardı :

;; -*- lexical-binding: t -*-

(let ((a nil))
  (setq a t)
  (print a))


(let ((a nil))
  (set 'a t)
  (print a))

emacs -Q --batch -l temp.elbaskılarla çalıştırıldığında :

t

nil

Bu bana çok garip geliyor. (setq a b)Kestirme izlenim altındaydım (set 'a b). Neler oluyor?

Yanıtlar:


14

Bu, belgelenmiş davranıştır. Emacs 25.1 elisp kılavuzundaki (çok gelişmiş) açıklama aşağıdaki gibidir:

Sembol nesnesinin kendisine bağlı dinamik değişkenlerin aksine, sözcük değişkenleri ve semboller arasındaki ilişkinin yalnızca yorumlayıcıda (veya derleyicide) bulunduğunu unutmayın. Bu nedenle, sembol argümanı alan işlevler ('sembol-değer', 'boundp' ve 'set' gibi) yalnızca bir değişkenin dinamik bağını (yani sembolünün değer hücresinin içeriğini) alabilir veya değiştirebilir.

C-hig (elisp) Lexical Binding

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.