【问题标题】:Lua unpack() messing argumentsLua unpack() 混乱的参数
【发布时间】:2015-04-27 18:01:44
【问题描述】:

我有这个测试函数,它只是打印传递给它的值

function test1(...)
  for k, v in ipairs(arg) do
    print(v)    
  end
end

function test2(...)
  for k, v in pairs(arg) do
    print(v)    
  end
end

-- GOOD behavior
test1(1, 2, 3, 4) -- produces 1 2 3 4
test2(1, 2, 3, 4) -- produces 1 2 3 4

-- BAD behavior
test1( unpack({1,2}), 3, 4) -- produces 1 3 4
test2( unpack({1,2}), 3, 4) -- produces 1 3 4 3

有人可以向我解释这种行为吗?

【问题讨论】:

    标签: lua


    【解决方案1】:

    此行为并非特定于 unpackLua Reference Manual 说:

    "函数调用和可变参数表达式都可以产生多个值。如果将函数调用用作语句(参见§3.3.6),则其返回列表调整为零元素,从而丢弃所有返回值。如果表达式被用作表达式列表的最后一个(或唯一的)元素,然后不进行任何调整(除非表达式被括在括号中)。在所有其他上下文中,Lua 将结果列表调整为一个元素, 要么丢弃除第一个以外的所有值,要么在没有值的情况下添加一个 nil。"

    (我的重点)

    【讨论】:

    猜你喜欢
    • 2014-02-10
    • 2015-12-19
    • 1970-01-01
    • 2013-09-08
    • 2021-11-09
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    相关资源
    最近更新 更多