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 也支援可變引數巨集,但是兩種在細節上可...