Lua可變長參數(shù)(Variable Number of Arguments)

翻譯文檔

一. 基本使用

假如我們系統(tǒng)沒有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以后,不再使用這種處理方式,它不會再為每一個可變長參數(shù)生成一個table;如果我們還想要使用arg,我們最好使用如下寫法
function func(...)
    local arg={...}
end

二. arg

  • 這些點(diǎn)(...)表明這個函數(shù)有一個可變長參數(shù)。
  • 它所有的參數(shù)存儲在一個單獨(dú)的table,在函數(shù)內(nèi),可以通過arg訪問
  • arg有一個額外的字段:n,表示參數(shù)的個數(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,最后一個為n

三.多返回值

有些函數(shù)返回固定個數(shù)的返回值,但有時,我們只需要第二個參數(shù)。

1. 第一種方法時使用虛變量(dummy variable)
--虛變量以單個下劃線(“_”)來命名,用它來丟棄不需要的數(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定義為:
--如果第一個參數(shù)為number類型,返回從該索引下的參數(shù)到最后一個參數(shù)。
--否則,第一個參數(shù)只能是"#",此時返回參數(shù)的個數(shù)

三. 傳遞可變長參數(shù)

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

--在比如
function g(...)
end
 
function f(...)
    local arg={...}
    g(unpack(ard))
end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 函數(shù)有兩種用途: 完成指定任務(wù),此時函數(shù)作為調(diào)用語句使用。 計(jì)算并返回值,此時函數(shù)作為賦值語句的表達(dá)式使用。 調(diào)用...
    JunChow520閱讀 3,871評論 0 3
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,246評論 0 38
  • 函數(shù)定義完成后,那么函數(shù)的調(diào)用方式,完成的功能,以及返回值都將固定。此時就剩下調(diào)用了,對于調(diào)用函數(shù),只需要關(guān)注參數(shù)...
    李小磊_0867閱讀 4,119評論 0 2
  • 【轉(zhuǎn)載請注明出處】:http://www.itdecent.cn/p/abd9eb83418c 基本語法 注釋 ...
    后端老鳥閱讀 634評論 0 1
  • 第六日筆記 1. 基礎(chǔ)概念 程序塊 定義 在 lua 中任何一個源代碼文件或在交互模式中輸入的一行代碼 程序塊可以...
    躍千山閱讀 372評論 0 0

友情鏈接更多精彩內(nèi)容