SX에 대한 모든 문서와 많은 게시물을 읽은 후에도 버퍼 로컬 변수의 모든 변형에 대해 명확하지 않습니다.
내 이해에 대한 요약은 다음과 같습니다.
(defvar foo ..)
파일의 동적 변수를 선언합니다. 그러나 변수는 (1) defvar
명령문 을 포함하지 않으면 다른 파일에 알려지지 않으며 (2) 변수는 버퍼 로컬이 아닌 범위 내에서 전역입니다.
(make-variable-buffer-local foo)
defvar
위 의 내용은 컴파일러와 다른 모든 사람들에게 변수 foo가 설정 될 때 설정된 모든 곳에서 버퍼 로컬로 처리된다는 것을 알려줍니다. 따라서이 패턴은 버퍼 로컬 변수를 선언하기에 좋은 스타일이며 두 명령문을 파일에 연속적으로 넣습니다.
(defvar xxx ...) ;declare xxx with global scope
(make-variable-buffer-local 'xxx) ;but now make it buffer-local everywhere
편의상 (defvar-local xxx ...)
위의 두 줄 대신 양식을 한 줄로 사용할 수 있습니다.
(defvar-local xxx ...) ;make xxx buffer local everywhere
위와 같이 선언되면 변수 xxx는 setq 문의 다른 변수처럼 사용할 수 있습니다.
이미 전역 동적 변수 인 버퍼 로컬 변수의 단일 인스턴스를 원한다면 다음 선언을 사용합니다. 첫 번째는 전역 범위 동적 변수를 선언하고 두 번째 명령문은 현재 버퍼에서 해당 변수의 버퍼 로컬 버전 인스턴스를 하나만 만듭니다.
(defvar xxx ...) ;declare xxx with global scope
(make-local-variable 'xxx) ;make xxx local in this buffer only
이제 내 질문에 대한 질문 (위의 모든 내용은 이해가 올바른지에 대한 암시 적 질문이었습니다).
변수 값을 설정할 때 setq
또는
을 사용할 수 있습니다 setq-local
. 언제 사용해야 setq-local
합니까? 왜?
setq-local
버퍼 로컬 변수 또는 비 버퍼 로컬 변수를 사용하면 어떻게됩니까 ?
선언 된 변수 가 setq-local
필요 defvar-local
합니까?
윌 setq-local
정상에 defvar
선언 된 변수 버퍼 로컬 변수로 돌려? (즉, setq-local
어떻게 든 (make-variable-local xxx)
선언 과 동등 합니까?
(setq-local VAR VALUE)
에 대한 속기이며 (set (make-local-variable VAR) VALUE)
일반적인 관용구였습니다.