我想要一個爲我創建一些代碼的宏。例如。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