翻譯文檔
一. 基本使用
假如我們系統(tǒng)沒(méi)有stdout (文件操作)驼鹅,現(xiàn)在我們需要重新定義print方法朴肺,把傳入的參數(shù)存取到全局變量玷室,以便稍后使用俏扩,我們可以這樣:
printResult = ""
function print (...)
for i,v in ipairs(arg) do
printResult = printResult .. tostring(v) .. "\t"
end
printResult = printResult .. "\n"
end
- 但是在lua5.1以后花颗,不再使用這種處理方式,它不會(huì)再為每一個(gè)可變長(zhǎng)參數(shù)生成一個(gè)table筐骇;如果我們還想要使用arg债鸡,我們最好使用如下寫(xiě)法
function func(...)
local arg={...}
end
二. arg
- 這些點(diǎn)(...)表明這個(gè)函數(shù)有一個(gè)可變長(zhǎng)參數(shù)。
- 它所有的參數(shù)存儲(chǔ)在一個(gè)單獨(dú)的table铛纬,在函數(shù)內(nèi)厌均,可以通過(guò)arg訪(fǎng)問(wèn)
- arg有一個(gè)額外的字段:n,表示參數(shù)的個(gè)數(shù)
function myprint (...)
for i,v in pairs(arg) do
printResult = printResult .. tostring(v) .. "\t"
end
print(arg.n) --4
printResult = printResult .. "\n"
end
myprint(1,0,"a",true)
print(printResult) --1 0 a true 4告唆,最后一個(gè)為n
三.多返回值
有些函數(shù)返回固定個(gè)數(shù)的返回值棺弊,但有時(shí),我們只需要第二個(gè)參數(shù)悔详。
1. 第一種方法時(shí)使用虛變量(dummy variable)
--虛變量以單個(gè)下劃線(xiàn)(“_”)來(lái)命名镊屎,用它來(lái)丟棄不需要的數(shù)據(jù),僅僅起到占位符的作用茄螃。
local _, x = string.find("hello hello", " hel")
2. 另外一種方法是定義select函數(shù)
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
--注意缝驳,如果使用lua自帶的select方法,輸出結(jié)果如下:
--6 9
--6 9
--9
--自帶select定義為:
--如果第一個(gè)參數(shù)為number類(lèi)型,返回從該索引下的參數(shù)到最后一個(gè)參數(shù)用狱。
--否則运怖,第一個(gè)參數(shù)只能是"#",此時(shí)返回參數(shù)的個(gè)數(shù)
三. 傳遞可變長(zhǎng)參數(shù)
function fwrite (fmt, ...)
return io.write(string.format(fmt, unpack(arg)))
end
--在比如
function g(...)
end
function f(...)
local arg={...}
g(unpack(ard))
end