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('#', ...)  --用符号"#"返回可变参数的长度

posted on 2020-06-08 02:17  *码独行侠  阅读(686)  评论(0)    收藏  举报

导航