По какой-то причине мне пришлось поставить quote
... end
блок в макросе и ex
сгенерирован программно. Этот код работает. необъем выражений и переменных в макросе Julia в модулях
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))'. –