在Lua中,如何将可变参数传递给另一个函数,并同时查看它们?

在Lua中,似乎我只能将变量参数传递给另一个函数,或者通过arg来查看它们,但不能两者兼而有之。以下是一个例子:

function a(marker, ...)
  print(marker)
  print(#arg, arg[1],arg[2])
end

function b(marker, ...)
  print(marker)
  destination("--2--", ...)
end

function c(marker, ...)
  print(marker)
  print(#arg, arg[1],arg[2])
  destination("--3--", ...)
end

function destination(marker, ...)
  print(marker)
  print(#arg, arg[1],arg[2])
end

注意,a只查看了变量参数,b只是将它们传递给另一个函数,而c两者都做了。以下是结果:

>> a("--1--", "abc", "def")
--1--
2   abc def

>> b("--1--", "abc", "def")
--1--
--2--
2   abc def

>> c("--1--", "abc", "def")
--1--
test.lua:13: attempt to get length of local 'arg' (a nil value)
stack traceback:
    ...test.lua:13: in function 'c'
    ...test.lua:22: in main chunk
    [C]: ?

我做错了什么?我不能将两者结合在一起吗?为什么不行?

原文链接 https://stackoverflow.com/questions/2753479

点赞
stackoverflow用户148870
stackoverflow用户148870

你可以使用select()来检查...,而不必使用arg表格:

firstarg  = select(1, ...)
secondarg = select(2, ...)

以此类推。

然而,我不确定你为什么会有合并它们的问题 - 据我经验,混合它们(和对任一操作的不同)并不是一个问题。

2010-05-02 12:53:59
stackoverflow用户33252
stackoverflow用户33252

使用 arg 是不推荐的。尝试这个:

function a(marker, ...)
  print(marker)
  print(select('#',...), select(1,...), select(2,...))
end

function b(marker, ...)
  print(marker)
  destination("--2--", ...)
end

function c(marker, ...)
  print(marker)
  print(select('#',...), select(1,...), select(2,...))
  destination("--3--", ...)
end

function destination(marker, ...)
  print(marker)
  print(select('#',...), select(1,...), select(2,...))
end

使用示例如下:

> a("--1--", "abc", "def")
--1--
2   abc def
> b("--1--", "abc", "def")
--1--
--2--
2   abc def
> c("--1--", "abc", "def")
--1--
2   abc def
--3--
2   abc def
>
2010-05-02 13:14:13
stackoverflow用户107090
stackoverflow用户107090

关于参数数量,您需要进行选择。您可以这样查看它们:

local first,second,third = ...
2010-05-02 19:54:45