lua 變長引數
lua 中的函式可以接受不同數量的實參。例如:在呼叫print時可以傳入乙個、兩個或多個實參。形參中的三個點(…)表示該函式可接受不同數量的實參。當這個函式被呼叫時,它的所有引數都會被收集到一起,這部分收集起來的實參稱為這個函式的「變長引數」。 乙個函式要訪問他的變長引數時,仍需要用到 「…」,只是此時的 「…」 是作為乙個表示式來使用的,其行為類似於乙個具有多重返回值的函式,它返回的是當前函式的所有變長引數。如下所示:
function add(.
..) local s =0--
表示乙個由所有變長引數構成的陣列,
必須要有,
()可以不寫
for i, v in ipairs()
do s = s + v
endreturn s
endprint
(add(3
,4,5
,6,7
))---
>
25function test(.
..)-- 把可變引數放在錶類
local args =
print
(#args)
endprint
(test(1
,2,3
))---
>
3
有點類似 c++ 的變長引數模版,lua 變長引數中的也可以與固定引數一起使用,比如經典的 printf 就是這麼實現的(printf(const char *format, …);),lua 中沒有 printf,但是可以用 io.write 和變長引數來實現,如下所示:
printf =
function
(str,..
.)return io.
write
(str:
format(.
..))
endprintf
("%s\n"
,"hello world!")--
-> hello world!
這是因為string.format() 的引數也是可變引數,其原型為 string.format (formatstring, ···)。第乙個引數為字串格式,後面的引數可以任意多個,用於填充第乙個引數中的格式控制符,最後返回完整的格式化後的字串。
格式控制符以%開頭,常用的有以下幾種:
str = string.
format
("字串:%s, 整數:%d, 小數:%f, 十六進製制數:%x"
,"abcd"
,123
,0.1415926
,123
)print
(str)---
> 字串:abcd, 整數:123
, 小數:0.141593
, 十六進製制數:7b
lua 可變長引數
lua 中 在引數列表中意為 可變引數 這個可變是指,通過這個可以輸入很多引數,但是不需要一一枚舉出來!例子 function a local a1 a2,a3,a4 print this is local num a1,a2,a3,a4 return a1,a2,a3,a4 endlocal at...
可變引數函式 以printf為例子
void foo int argv1,char argv2,在參數列的末尾給出省略號,表明這個函式的引數是可變的 程序在呼叫函式時,會將函式引數壓入使用者棧,壓入的順序是從參數列右端開始,從右至左的壓棧順序支援了可變引數的實現。左邊的引數在低位址,右邊的引數在高位址。進入函式後,以左邊的引數為線索,...
Lua(八)引數的簡化 可變引數(變長引數)
引數的簡化 概念 函式若只有乙個引數,並且此引數是乙個字串或者table構造式,則 實參 圓括號可以省略。function testfunction str print testfunction str endtestfunction aaa testfunction aaa testfunctio...