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
相關文章
相關標籤/搜索