如何在Lua中妥善处理包含nil的变长参数?

2026-04-01 18:440阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计354个文字,预计阅读时间需要2分钟。

如何在Lua中妥善处理包含nil的变长参数?

我尝试编写一个函数,用于创建一个打印测试功能,它将文件内容作为第一个参数。首先,我写了一个这样的函数:

luafunction fprint(f, ...) for i, v in ipairs({...}) do f:write(tostring(v)) f:write(\t) end f:write(\n)end

我试图创建一个调试打印功能,它将文件句柄作为第一个参数。首先我写一个这样的函数:

如何在Lua中妥善处理包含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(它计算实际的参数个数)。
阅读全文
标签:varargs正确

本文共计354个文字,预计阅读时间需要2分钟。

如何在Lua中妥善处理包含nil的变长参数?

我尝试编写一个函数,用于创建一个打印测试功能,它将文件内容作为第一个参数。首先,我写了一个这样的函数:

luafunction fprint(f, ...) for i, v in ipairs({...}) do f:write(tostring(v)) f:write(\t) end f:write(\n)end

我试图创建一个调试打印功能,它将文件句柄作为第一个参数。首先我写一个这样的函数:

如何在Lua中妥善处理包含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(它计算实际的参数个数)。
阅读全文
标签:varargs正确