Can we pass 2D array in vardef? Followed is a small code. It failed to compile.
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;

"Text parameters are very general, but their generality sometimes gets in the way. If you just want to pass a variable name to a macro, it is better to declare it as a suffix parameter.". But thesuffixgenerally makes me confusing. I don't know when I should use. Sometimes by guess. Thanks @ Franck – warem Dec 16 '17 at 20:24suffixis to be used when you need to manipulate a variable (or more generally a suffix name), e.g. to increment it if it is a numeric. The parameters given asexprare to be used as such, they can't be changed. – Franck Pastor Dec 16 '17 at 21:29exprvariables are expanded before they are passed to the macro.textandsuffixare not.suffixhas a limited range of allowed characters,textis more general, with for example,,allowed. – Thruston Dec 17 '17 at 17:11