Как я могу игнорировать первые результаты от функции в Lua?
Функции Lua могут возвращать несколько результатов:
a, b, c = unpack({'one', 'two', 'three'})
Если меня не интересует третье возвращаемое значение, я могу проигнорировать его при вызове функции:
a, b = unpack({'one', 'two', 'three'})
Есть ли подобный способ игнорировать первые элементы X при вызове функции?
Я мог бы написать этот код, если мне нужно только третье возвращаемое значение, но мне было интересно, существует ли более чистый код:
_, _, c = unpack({'one', 'two', 'three'})
1 ответ
Решение
Вы можете использовать select
функция. Он вернет все аргументы после index
, где index
это первый аргумент, данный select
,
Примеры:
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
Тем не менее, я думаю, что в большинстве случаев, написание _,_,c = f()
чище select
в основном полезно, когда номер аргумента заранее неизвестен, или когда цепные вызовы функций вместе (например, f(select(2, g()))
)