¿Cómo puedo ignorar primeros resultados de una función en Lua?
-
02-10-2019 - |
Pregunta
Lua funciones pueden devolver varios resultados:
a, b, c = unpack({'one', 'two', 'three'})
Si no estoy interesado en el tercer valor de retorno, puedo elegir ignorarlo cuando se llama a la función:
a, b = unpack({'one', 'two', 'three'})
¿Hay una manera similar a ignorar los primeros elementos de X cuando se llama a la función?
Yo podría escribir este código si sólo quiero el tercer valor de retorno, pero me preguntaba si existe un código más limpio:
_, _, c = unpack({'one', 'two', 'three'})
Solución
Se puede utilizar la función de href="http://www.lua.org/manual/5.1/manual.html#pdf-select" rel="noreferrer"> select
. Se devolverá todos los argumentos después index
, donde index
es el primer argumento dado a select
.
Ejemplos:
c = select(3, unpack({'one', 'two', 'three'}))
b, c = select(2, unpack({'one', 'two', 'three'}))
b = select(2, unpack({'one', 'two', 'three'})) --discard last return value
Dicho esto, creo que en la mayoría de los casos, la escritura _,_,c = f()
es más limpio. select
es sobre todo útil cuando el número argumento no se conoce de antemano, o cuando el encadenamiento de llamadas de función juntos (por ejemplo f(select(2, g()))
)