Comment puis-je ignorer les premiers résultats d'une fonction dans Lua?
-
02-10-2019 - |
Question
fonctions Lua peuvent retourner plusieurs résultats:
a, b, c = unpack({'one', 'two', 'three'})
Si je ne suis pas intéressé par la troisième valeur de retour, je peux choisir de l'ignorer lors de l'appel de la fonction:
a, b = unpack({'one', 'two', 'three'})
Y at-il une manière similaire à ignorer les premiers éléments X lorsque vous appelez la fonction?
Je pourrais écrire ce code si je ne veux que la troisième valeur de retour, mais je me demandais si un code plus propre existe:
_, _, c = unpack({'one', 'two', 'three'})
La solution
Vous pouvez utiliser la fonction select
. Il retournera tous les arguments après index
, où index
est le premier argument donné à select
.
Exemples:
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
Cela dit, je pense que dans la plupart des cas, l'écriture _,_,c = f()
est plus propre. select
est surtout utile lorsque le nombre d'argument ne sait pas à l'avance, ou lorsque les appels de fonction enchaînant (par exemple f(select(2, g()))
)