5 2 可變引數

2021-07-24 16:49:02 字數 1281 閱讀 8988

5.2 可變引數

lua函式可以接受可變數目的引數,和c語言類似在函式引數列表中使用三點(...)表示函式有可變的引數。lua將函式的引數放在乙個叫arg的表中,除了引數以外,arg表中還有乙個域n表示引數的個數。

例如,我們可以重寫print函式:

printresult = ""

function print(...)

for i,v in ipairs(arg) do

printresult = printresult .. tostring(v) .. "\t"

endprintresult = printresult .. "\n"

end

有時候我們可能需要幾個固定引數加上可變引數

function g (a, b, ...) end

call              parameters

g(3)              a=3, b=nil, arg=

g(3, 4)           a=3, b=4, arg=

g(3, 4, 5, 8)     a=3, b=4, arg=

如上面所示,lua會將前面的實參傳給函式的固定引數,後面的實參放在arg表中。

舉個具體的例子,如果我們只想要string.find返回的第二個值。乙個典型的方法是使用啞元(dummy variable,下劃線):

local _, x = string.find(s, p)

-- now use `x'

還可以利用可變引數宣告乙個select函式:

function select (n, ...)

return arg[n]

end

print(string.find("hello hello", " hel")) --> 6  9

print(select(1, string.find("hello hello", " hel"))) --> 6

print(select(2, string.find("hello hello", " hel"))) --> 9

有時候需要將函式的可變引數傳遞給另外的函式呼叫,可以使用前面我們說過的unpack(arg)返回arg表所有的可變引數,lua提供了乙個文字格式化的函式string.format(類似c語言的sprintf函式):

function fwrite(fmt, ...)

return io.write(string.format(fmt, unpack(arg)))

end

這個例子將文字格式化操作和寫操作組合為乙個函式。

可變引數列印 解析可變引數

1.的一般用法 define str s s define cons a,b int a e b int main 2.接受,列印可變引數 參考 glibc庫的bebug函式 define printf fmt,args.printf fmt,args 使用方法 define pr debug fm...

可變引數 函式 可變引數列表 1

我們在c語言程式設計中有時會遇到一些引數個數可變的函式,即函式的入參個數和型別是不確定的,例如printf 函式,其函式原型為 int printf char format,它除了有乙個引數format固定以外,後面跟的引數的個數和型別是可變的 用三個點 做引數佔位符 實際呼叫時可以有以下的形式 p...

可變引數及可變引數巨集的使用

我們在c語言程式設計中會遇到一些引數個數可變的函式,例如printf 這個函式,這裡將介紹可變函式的寫法以及原理.一般在除錯列印debug 資訊的時候,需要可變引數的巨集.從c99開始可以使編譯器標準支援可變引數巨集 variadic macros 另外gcc 也支援可變引數巨集,但是兩種在細節上可...