我们可以传入二维数组吗vardef
?下面是一小段代码。编译失败。
outputtemplate := "%j-%c.eps";
prologues := 3;
input boxes
beginfig(1)
vardef table (expr upper_left_centre, row, col, data) =
label(data[0][0], upper_left_centre);
enddef;
string data[][];
% title
data[0][0] := "Wall height";
table (origin, 2, 6, data);
endfig;
答案1
为此,您可以将此数组声明为后缀范围。
outputtemplate := "%j-%c.eps";
prologues := 3;
beginfig(1)
vardef table (expr upper_left_centre)(suffix data) =
label(data[0][0], upper_left_centre);
enddef;
string data[][];
% title
data[0][0] := "Wall height";
table (origin, data);
endfig;
end.
引用MetaPost 手册,第 56 页:
如果你只是想将变量名传递给宏,最好将其声明为后缀参数。例如,
def incr(suffix $) = begingroup $:=$+1; $ endgroup enddef;
定义一个宏,它将接受任何数字变量,向其添加一个,并返回新值。