我正在尝试创建一个调试打印函数,它将文件句柄作为第一个参数。首先,我写一个这样的函数:
function fprint (f, ...)
for i, v in ipairs{...} do
f:write(tostring(v))
f:write("\t")
end
f:write("\n")
end
只要我不通过这个功能就有效nil
参数中的值。但如果我用一个来称呼它nil
,它不打印nil
值和其余参数。
fprint(io.stderr, 1, 2, nil, 3)
=> prints only 1 and 2
那么,解决这个问题的正确方法是什么?
其实很容易处理nil
varargs 中的值,您所需要做的就是使用select http://www.lua.org/manual/5.1/manual.html#pdf-select函数,甚至可以使用nil
(它计算参数的实际数量)。下面的惯用法非常有用,它是一个核心库函数table.pack http://www.lua.org/manual/5.2/manual.html#pdf-table.pack在 Lua 5.2 中:
function table.pack(...)
return { n = select("#", ...), ... }
end
参数的数量存储在字段中n
,所以为了迭代它们,只需使用:
function vararg(...)
local args = table.pack(...)
for i=1,args.n do
-- do something with args[i], careful, it might be nil!
end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)