在Lua中,处理包含nil的varargs的正确方法是什么?
发布时间:2020-12-15 00:22:04 所属栏目:大数据 来源:网络整理
导读:我试图创建一个调试打印功能,它将文件句柄作为第一个参数。首先我写一个这样的函数: function fprint (f,...) for i,v in ipairs{...} do f:write(tostring(v)) f:write("t") end f:write("n")end 只要我不在参数中传递nil值,此函数就可以工作。但是如
我试图创建一个调试打印功能,它将文件句柄作为第一个参数。首先我写一个这样的函数:
function fprint (f,...) for i,v in ipairs{...} do f:write(tostring(v)) f:write("t") end f:write("n") end 只要我不在参数中传递nil值,此函数就可以工作。但是如果我把它称为零,它不会打印零值和其余的参数。 fprint(io.stderr,1,2,nil,3) => prints only 1 and 2 那么,解决这个问题的正确方法是什么? 解决方法
实际上,很容易处理varargs中的nil值,只需要使用
select 函数即可使用nil(它计算实际的参数个数)。以下成语是非常有用的,它是Lua 5.2中的核心库函数
table.pack :
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |