在Lua中,处理包含nil的varargs的正确方法是什么?

前端之家收集整理的这篇文章主要介绍了在Lua中,处理包含nil的varargs的正确方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图创建一个调试打印功能,它将文件句柄作为第一个参数。首先我写一个这样的函数
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

猜你在找的Lua相关文章