어떤 이유로 든 quote
... end
블록을 매크로에 넣고 ex
을 프로그래밍 방식으로 생성해야했습니다. 이 코드는 작동합니다.모듈의 줄리아 매크로에서 표현식과 변수의 범위
macro addsum_out()
quote
ex = :(x+y)
sum(eval(ex))
end
end
x = [1 1 1]
y = [2 2 2]
z2 = @addsum_out
매크로가 모듈 내부에 넣어, 그것은 더 이상 작동하지 않습니다 :
module MyModule
export @addsum
macro addsum()
quote
ex = :(x+y)
sum(eval(ex))
end
end
end
using MyModule
x = [1 1 1]
y = [2 2 2]
z = @addsum
그것은 말한다 :
ERROR: LoadError: UndefVarError: x not defined
내가 표현을 평가하기 위해, 어딘가 esc
을 넣어해야한다고 생각 ex
은 모듈 외부의 주요 범위에 있습니다. 이걸 어떻게 처리해야합니까?
'eval' 매크로에서 사용할 수 없습니다 :
내가 조립 가이드에서이 주제에 대한 약간의 토론이있다. 너 뭐하려고? –
'eval'은 모듈 전역 범위에서 작동합니다. 'macroexpand (: (@ addsum))'을보고'MyModule.eval'을 확인하십시오. 어쨌든, 그것은 완전히 불필요합니다. 대신'esc (:(x + y))'를 반환해야합니다. –