버퍼 로컬 변수를 다시 전역으로 만듭니다.


12

지역 변수를 실험하고 설정했습니다.

(defvar-local foo nil "Buffer local foo")

나중에 다음을 사용하여 전역 변수를 사용하도록 프로그램을 다시 디자인했습니다.

(defvar foo nil "Not buffer local foo")

그러나 변수는 여전히 로컬 버퍼이며 (kill-local-variable 'foo)죽이지 않았습니다.

기본적으로 어떻게 "실행 취소"할 수 make-local-variable있습니까?


1
FWI, defvar-local은 make-variable-buffer-localnot을 사용합니다 make-local-variable.
Malabarba

답변:


12

@Malabarba의 의견은 문제를 설명합니다.

kill-local-variable 않는 바인딩 지역 변수를 제거하기. 그러나 귀하의 경우 변수는 모든 버퍼에서 자동으로 로컬이므로 값을 다시 할당하면 해당 값은 로컬입니다.

AFAIK에서는 기호 make-variable-buffer-local에 사용 unintern하는 것 외에는 카운터를 처리 할 방법이 없습니다 . ( makunbound도움이되지 않습니다.)

인턴을 사용하면 괜찮습니다. 그러나 uninterning은 기호를 모두 제거하므로 변수 이외의 다른 기호로 기호를 사용한 경우 부정적인 결과가 발생할 수 있습니다.

그래서 내가 가진 유일한 대답은 unintern원하는 값 을 사용 하고 변수를 다시 할당하는 것입니다. 전역 값이 될 것입니다.

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