在 Lua 中,如何获取包括空值在内的所有参数,以进行可变数量的参数处理?

对于可变数量的参数,以下是来自lua.org的示例:

function print (...)
    for i,v in ipairs(arg) do
        printResult = printResult .. tostring(v) .. "\t"
    end
    printResult = printResult .. "\n"
end

从上面的示例代码中,如果我调用

print("A", "B", nil, nil, "D")

只有 "A" 和 "B" 被传入,自第一个 nil 以后的所有参数都被忽略。因此,在这个例子中打印的结果是 "AB"。

有没有办法获取所有参数,包括 nil?例如,我可以检查参数是否为 nil,如果是,我可以打印 "nil" 作为字符串。因此,在这个例子中,我实际上想要打印

AB nil nil D

当然,在修改代码后才能实现。但我的问题是......最重要的是,如何获取所有参数,即使其中一些是 nil?

点赞
用户783743
用户783743

你尝试过以下代码吗:

function table.pack(...)
    return { n = select("#", ...); ... }
end

function show(...)
    local string = ""

    local args = table.pack(...)

    for i = 1, args.n do
        string = string .. tostring(args[i]) .. "\t"
    end

    return string .. "\n"
end

现在你可以这样使用它:

print(show("A", "B", nil, nil, "D"))

希望能够帮到你。

2014-03-02 04:58:30
用户6343822
用户6343822

你想要实现以下的功能:

function print (...)
    for i=1, #arg do
        local v = arg[i]
        printResult = printResult .. tostring(v) .. "\t"
    end
    printResult = printResult .. "\n"
end

在 Lua 中,pairs 函数会忽略 nil,而 ipairs 函数会在找到 nil 的时候停止循环。

2021-09-06 21:17:47