Насколько я знаю, не существует простого способа, независимого от реализации, чтобы узнать длину массива, содержащего nil
записей, поскольку операция #
может указывать на любую позицию, за которой следует nil
, но это быстрое решение, зависящее от реализации, которое напечатает nil
.
function fprint (f, ...)
local parm={...}
for i=1,#parm do
f:write(tostring(parm[i]))
f:write("\t")
end
f:write("\n")
end
Вместо ретрансляции на #
вы можете усложниться (и, следовательно, не зависеть от реализации), поскольку вы знаете, что таблица parm
является массивом и используете что-то вроде этого:
function last_index(array)
local max = 0
for k, _ in pairs(array) do
max = math.max(max, k)
end
return max
end
function fprint (f, ...)
local parm={...}
for i=1,last_index(parm) do
f:write(tostring(parm[i]))
f:write("\t")
end
f:write("\n")
end
Если вы можете пропустить значения nil
и порядок не важен, то переключение на pairs
будет намного проще.