06. 5.2+ Lua 中的可变参数

Par @Martin dans le
Tags :

在 5.2 之前, 你也许像下面这样来使用 Lua 中的变参功能:

function text( ... )
  for i = 1, arg.n do
    print(arg[i])
  end
end

text(10, 20)


这完全没有问题, 在 5.2 之前, Lua 将函数的可变参数存放在一个叫 arg 的表中, 除了参数以外, arg 表中还有一个域 n 表示参数的个数.

但是, 到了 5.2 中, 定义函数的时候,  如果使用了 “…” 表达式, 那么语言后台将不会再帮忙打包 “arg” 对象了, 它将直接使用 {…} — — 用可变参数中的所有值创建一个列表. 需要注意的是, 这个表没有 n 域, 它只含参数, 我们可以用下面这种遍历表的方法来遍历它:

  for i,v in ipairs{...} do
    print(v)
  end


或者我们可以自己手动构建 arg 表: local arg = table.pack(...)
table.pack(…) 将返回用所有参数以键 1,2, 等填充的新表,  并将 “n” 这个域设为参数的总数(就像 5.2 之前 Lua 后台帮我们打包的一样).
接下来就可以像 5.2 之前那使用变参功能了.

function text( ... )
  local arg = table.pack(...)
  for i = 1, arg.n do
    print(arg[i])
  end
end

text(10, 20)