Я пытаюсь написать макрос Julia, который принимает объекты Cmd и запускает их внутри цикла. Уловка заключается в том, что я хочу использовать переменные локального цикла для интерполяции в команде. Я бы написал функцию и использовал eval(), но eval() использует глобальную область видимости и поэтому не может видеть переменные локального цикла.Использование внешней командной строки Юлии внутри макросов?
Ниже приведен простой пример, демонстрирующий, как работает строка интерполяции, но команда интерполяции не удается:
macro runcmd(cmdExpr)
quote
for i in 1:2
println("i: $i")
run($cmdExpr)
end
end
end
@runcmd(`echo $i`)
выходы
i: 1
ERROR: i not defined
in anonymous at none:5
Если я расширяю макрос я получаю
quote # none, line 3:
for #261#i = 1:2 # line 4:
println("i: $#261#i") # line 5:
run(Base.cmd_gen((("echo",),(i,))))
end
end
Я предполагаю, что часть # 261 #, отсутствующая в ссылке аргумента cmd_gen для i, равна r приподнятый к проблеме, но я не знаю точно.
Просто любопытно ... Каков ваш прецедент и/или мотивация для этого? – rickhg12hs
Вы читали макроэкономическую часть руководства? 'I' в вашей' quote' не будет отображаться буквально как 'i' в сгенерированном коде. – IainDunning
@ rickhg12hs Я запускаю множество команд оболочки, каждая из которых находится над массивом возможных наборов данных, а командам необходимо ссылаться на имя набора данных. – slund