Как я могу игнорировать первые результаты от функции в 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())))

Другие вопросы по тегам