2011-08-03 16 views
5

Encontré el siguiente código en un proyecto con el que estoy trabajando. No entiendo la parte de iteración de for-loop. ¿Cuál es la función select()?¿Qué hace? para i = 1, seleccione ('#', ...)

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

Por cierto, el ciclo se puede reemplazar por 'str = table.concat ({str, ...}," \ t ")'. – lhf

+1

Sugeriría usar 'file: write()' aquí en lugar de concatenar la cadena y luego llamar 'os.execute()' - sería mucho más rápido. Es posible que desee "lavar" el archivo al final de la línea. –

+0

gracias por las sugerencias de optimización – AlexStack

Respuesta

7

Desde el manual de 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, que se puede convertir en una mesa si realmente necesita:

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

Por último, si pasa "#" como índice, la función devuelve un conteo de los múltiples argumentos proporcionados 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) 

Ver esto website.

+0

gracias por el enlace. fue útil. – AlexStack

Cuestiones relacionadas