에 정의 된 다음 예제 매크로를 사용하십시오 macro.el
.
(defmacro some-macro (&rest body)
`(let ((some-variable 1))
,@body))
그리고 다음과 같은 기능을 가지고 다른 파일에 정의를 , function.el
.
(defun some-function ()
(some-macro (do-something)))
경우 function.el
바이트가 컴파일되어 것이다 some-variable
어휘 또는 동적 바인딩 하에서 구속?
파일 사용 여부에 따라 달라 -*- lexical-binding: t; -*-
지므로 내 질문은 특히 다음 상황과 관련이 있습니다.
- 경우
function.el
바인딩 만 사용하는 어휘macro.el
하지 않습니다. - 경우
macro.el
바인딩 만 사용하는 어휘function.el
하지 않습니다.
some-var
내부 (defvar 포함)로 선언 된 경우 차이 가 function.el
있습니까? 그렇다면, 그렇지 않은 경우에 특히 관심 이 있습니다.
유지상
—
phils December
확실하지는 않지만 매크로 확장은 매크로 정의가 아닌 확장 사이트에서 바인딩 의미를 상속한다고 확신합니다. 확장은 실제로 호출 사이트에서 대체되므로 의미가 있습니다. 그러나 : 왜 알고 싶습니까? 실제로 이러한 세부 사항에 의존 하는 코드를 작성 하시겠습니까 ?!
—
lunaryorn
@Malabarba 타겟 버퍼의 바인딩에 의존하지 않는 방식으로 매크로를 작성하십시오. 또는 매크로를 전혀 사용하지 마십시오.
—
lunaryorn
@lunaryorn 명확하지 않았습니다. 매크로는 let 형식 일 뿐이며 어느 쪽이든 광고 된대로 작동합니다. 이 let 형식이 확장 된 파일에 지정된 범위를 따르는 지 확인하고 싶습니다.이 질문은 자동으로 발생하는지 또는 매크로에서 코드를 작성해야하는지 여부의 일부입니다.
—
Malabarba