어휘 범위가있는 let-bound 변수에서 setq와 set quote가 다르게 작동하는 이유는 무엇입니까?


14

내 확장 중 하나에 버그가있어 결국 set예상대로 작동하지 않아 발생하는 것으로 나타났습니다 .

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

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


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

emacs -Q --batch -l temp.el인쇄물로 실행할 때 :

t

nil

이것은 나에게 매우 이상해 보인다. 나는 (setq a b)속기 의 인상을 받았다 (set 'a b). 무슨 일이야?

답변:


14

이것은 행동으로 기록됩니다. Emacs 25.1 elisp 매뉴얼의 (훨씬 개선 된) 설명은 다음과 같습니다.

기호 객체 자체에 연결된 동적 변수와 달리 어휘 변수와 기호 간의 관계는 인터프리터 (또는 컴파일러)에만 있습니다. 따라서 '심볼 값', 'boundp'및 'set'과 같은 기호 인수를 사용하는 함수는 변수의 동적 바인딩 (예 : 기호 값 셀의 내용) 만 검색하거나 수정할 수 있습니다.

C-hig (elisp) Lexical Binding

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.