Lua程序设计 变长参数

         Lua中的函数还能够接受不一样数量的实参。例如:在调用print时能够传入一个、两个或多个实参。数组

function add(...)
local s = 0
  for i, v in ipairs{...} do   --> {...} 表示一个由全部变长参数构成的数组
    s = s + v
  end
  return s
end
print(add(3,4,5,6,7))  --->25

         参数中的三个点(...)表示该函数可接受不一样数量的实参。当这个函数被调用时,它的全部参数都会被收集到一块儿,这部分收集起来的实参称为这个函数的“变长参数”。函数

         一个函数要访问他的变长参数时,仍须要用到3个点(...),只是此时的3个点做为一个表达式来使用的(如上)。表达式“...”的行为相似于一个具备多重返回值的函数,它返回的是当前函数的全部变长参数。lua

function fwrite(fmt, ...)  --->3点以前有个固定的参数fmt。具备变长参数的函数一样也能够用拥有任意数量的固定参数,可是固定参数必须放在变长参数以前。
                                lua会将前面的实参赋予固定参数,而将余下的实参(若是有的话)视为变长参数。
 return io.write(string.format(fmt, ...))   
end 

fwrite()  --->fmt = nil,没有变长参数。
fwrite("a")   --->fmt = "a",没有变长参数。
fwrite("%d%d", 4, 5) ---->fmt = "%d%d",变长参数= 4 和 5

        一般一个函数在遍历其变长参数时只须要使用表达式{...},这就像访问一个table同样,访问全部的变长参数。spa

       函数select用于访问变长函数中有nil值的状况:code

       调用select时,必须传入一个固定的实参selector和一系列变长参数。若是selector为数字n,那么select返回它的第n个可变实参;不然selector只能为字符串“#”,这样select会返回变长参数的总数。orm

for i =1 ,select("#", ...) do
  local arg = select(i, ...)  --->获得第i个变长参数对应的可变实参。
    <循环体>
end
相关文章
相关标签/搜索