Lua开发之变长参数和unpack函数及select函数运用
· 变长参数
在Lua中支持可变参数,用 ... 表示,如定义一函数:
local function func1(...) end
同时也支持在变长参数前面添加固定参数:
local function func1(var,...) --todo end
注意,在使用变长参数时,要先将其获取,然后才能使用,
local function func(...) local args = { ... } print (#args) end
将变长参数用花括号进行打包后,会得到常见的table列表。
· unpack函数
在Lua里通常使用unpack函数来将数组形式的table拆开,
有三个参数,第一个参数是要拆的table,第二个参数是起始元素的下标,默认为1;第三个参数是结束元素的下标,默认为table的长度。
local info = {1, 2, 3, 4, 5, 6} local a,b,c,d,e,f = unpack(info) print(a,b,c,d,e,f) --输出结果:1 2 3 4 5 6
注意,若遇到数组下有nil,或者有字母key时,unpack将会返回nil。 如:
local info = {1, 2, 3, nil, 5, p=6} local a,b,c,d,e,f = unpack(info) print(a,b,c,d,e,f) 输出结果:1 2 3 nil 5 nil(说明unpack只能解数字key下标)
· select函数
select(n, ...) --这里数字n表示起点,select(n, ...)返回从起点n到总长结束的可变参数,如:
function f(...) a = select(3,...) print (a) print (select(3,...)) end f(0,1,2,3,4,5) 输出打印>> 2 2,3,4,5
上述例子要注意,select函数返回结果不是列表或其他数据结构,就是对应长度拆值,则a = 2, 3, 4, 5,故a = 2;
function f(...) print (select('#', ...)) end f(1,2,3) 输出结果>>3
另外,select('#', ...) --用符号"#"返回可变参数的长度