Emacs lisp setq
와 차이점은 무엇입니까 defvar
?
/programming/3855862 에서 동일한 질문의 일반적인 lisp 버전을 봅니다 . Elisp에서도 동일합니까?
Emacs lisp setq
와 차이점은 무엇입니까 defvar
?
/programming/3855862 에서 동일한 질문의 일반적인 lisp 버전을 봅니다 . Elisp에서도 동일합니까?
답변:
Emacs에게 다음 질문을 해야합니다 :. C-h i
Elisp 매뉴얼 ( m Elisp
)을 선택 하고 색인에서 "defvar"( i defvar
) 를 검색하십시오 . 그러면 변수 정의 노드로 이동합니다 .
Emacs는 doc 문자열을defvar
첨부 할 수 있으며 변수에 이미 값이 있으면 아무 것도 수행하지 않는다고 말합니다 .
또한 defvar
할당 할 값이없는 사용에 대해 알려줍니다 (defvar foo)
.. 그것은 그 사실을 알려줍니다 동적 범위 할 수있는 변수를 선언합니다 .
setq
해당 속성이 없습니다.
defvar
와 setq
이맥스 리스프와 커먼 리스프에, 비슷하지만, 상당히 다릅니다.
defvar
전역 변수 (명령형 프로그래밍 스타일에서와 같이) 및 사용자 정의 규칙 처럼 들리지만 setq는 함수형 프로그래밍 언어 (동적 / 어휘 범위 지정 규칙이있는 전역 범위 지정 모드에 따라 다름)의 바인딩과 비슷합니다. .......)
setq
var (발생)가 로컬인지 여부에 관계없이 var 값을 설정합니다. defvar
var를 전역으로 선언합니다. ( "buffer-local":이기도합니다 local-variable-p
.) var 발생은 함수 arg로 또는에 의해 let
일반적인 의미에서 "local"입니다. let
etc 등에 의해 바인딩 된 var 가 전역 (또는 버퍼 로컬)이면 해당 기간 / 범위 동안 로컬 바인딩 (일반 의미)이 생성됩니다 let
. 해당 바인딩 범위 내 setq
에서 로컬 값을 변경합니다. var 발생 보다 로컬 (스택) 또는 전역 (힙) 인 var 발생 에 대해 이야기하는 것이 좋습니다 .
M-x report-emacs-bug
다른 사람들이 더 쉽게 얻을 수 있도록 개선을 제안하는 것이 도움이 될 수 있습니다.