我想要一个为我创建一些代码的宏。例如。Julia的宏变量范围和eval
我有一个矢量x= [9,8,7]
我想用宏来生成这段代码vcat(x[1], x[2], x[3])
并运行它。我希望它适用于任意长度的向量。
我所作出的宏如下
macro some_macro(a)
quote
astr = $(string(a))
s = mapreduce(aa -> string(astr,"[",aa,"],"), string, 1:length($(a)))
eval(parse(string("vcat(", s[1:(end-1)],")")))
end
end
x = [7,8,9]
@some_macro x
上述作品。但是,当我试图把它包在函数内部
function some_fn(y)
@some_macro y
end
some_fn([4,5,6])
它不工作,并给出错误
UndefVarError: y not defined
,它突出了以下的罪魁祸首
s = mapreduce(aa -> string(astr,"[",aa,"],"), string, 1:length($(a)))
编辑 见julia: efficient ways to vcat n arrays
先进的例子,为什么我想要做使用图示操作
可能重复[Julia v0.6宏内函数](https://stackoverflow.com/questions/45400875/julia-v0-6-macro-inside-function) – Gnimuc
你需要'esc'ape'a ':'astr = string($(esc(a)))'并对第二行进行相同的修改。 – Gnimuc
你有签出'@生成'功能吗?这似乎就是你真正需要的,而不是宏观的。 – Gnimuc