이 매크로를 정의했습니다.
(defmacro with-current-directory (directory &rest body)
"Set the working directory temporarily set to DIRECTORY and run BODY.
DIRECTORY is expanded"
`(let ((default-directory
,(file-name-as-directory
(expand-file-name (eval directory)))))
,@body))
emacs가 열릴 때로드되는 일부 lisp 함수에서 사용합니다. 나는 항상 다음과 같은 경고를받습니다.
Eager macro-expansion failure: (void-variable repo-dir)
Eager macro-expansion failure: (wrong-type-argument stringp nil)
내가 이해하는 것은 이러한 변수가로드 시간에 정의되지 않았고 emacs가 평가하려고하기 때문에 발생합니다. 제 질문은 이러한 경고를받지 않으려면 어떻게해야하는지입니다. 발생하지 않도록 매크로를 정의하는 방법이 있습니까? 변수 자체의 기호가 아닌 변수 값을 사용하는 방법을 알 수 없습니다.
이렇게 :
`(let ((default-directory
(file-name-as-directory (expand-file-name ,directory))))
때문에 directory
값, 값으로 평가 것 혀짤배기 표현하지, 당신은 매크로의 확장으로 표현 (쉼표 연산자를 사용하여) 삽입해야합니다. 를 호출하기 전에 쉼표를 넣으면 식의 토큰 만을file-name-as-directory
기반으로 매크로 확장시 디렉터리를 계산할 수 있어야합니다 . 변수 이름을 참조하는 경우에는 수행 할 수 없습니다 .directory
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다