【问题标题】:In Lua, how to get all arguments including nil for variable number of arguments?在 Lua 中,如何获取所有参数,包括可变数量参数的 nil?
【发布时间】:2021-09-07 05:17:47
【问题描述】:

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

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

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

打印(“A”,“B”,无,无,“D”)

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

是否可以获得包括 nils 在内的所有参数?例如,我可以检查一个参数是否为 nil,如果是,我可以将“nil”打印为字符串。所以在这个例子中,我实际上想要打印

AB nil nil D

当然是在对代码进行了一些修改之后。但我的问题是……最重要的是,即使其中一些是 nil,如何获得所有论点?

【问题讨论】:

    标签: lua


    【解决方案1】:

    你试过了吗:

    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"))
    

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      你想这样做:

      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 时停止 for 循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        • 2020-01-02
        • 2016-12-05
        • 2011-11-26
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多