2011-08-03 66 views
5

我在使用的項目中遇到以下代碼。我不明白for循環的迭代部分。什麼是select()函數?它是做什麼的?對於i = 1,請選擇('#',...)

function _log (str,...) 
    local LOG="/tmp/log.web" 
    for i=1,select('#',...) do 
    str= str.."\t"..tostring(select(i,...)) 
    end 
os.execute("echo \"".. str .."\" \>\> " .. LOG) 
end 
+4

順便說一句,循環可以用'str = table.concat({str,...},「\ t」)'替換。 – lhf

+1

我會建議在這裏使用'file:write()'而不是連接字符串,然後調用'os.execute()' - 會更快。您可能需要在該行末尾「刷新」文件。 –

+0

感謝您的鏈接優化提示 – AlexStack

回答

7

從Lua的手冊:

If index is a number, returns all arguments after argument number 
index. Otherwise, index must be the string "#", and select returns 
the total number of extra arguments it received. 

Lua has built in multiple arguments,你可以轉換成 表,如果你真的需要:

function multiple_args(...) 
    local arguments = {...} -- pack the arguments in a table 
    -- do something -- 
    return unpack(arguments) -- return multiple arguments from a table (unpack) 
end 

最後,如果你傳遞「#」作爲索引,該函數返回提供的多個參數的計數d:

print(select("#")) --> 0 
print(select("#", {1, 2, 3})) --> 1 (single table as argument) 
print(select("#", 1, 2, 3)) --> 3 
print(select("#", {1,2,3}, 4, 5, {6,7,8}) --> 4 (a table, 2 numbers, another table) 

看到這個website

+0

感謝您的鏈接。這很有幫助。 – AlexStack

相關問題