Как я могу игнорировать первые результаты от функции в Lua? - PullRequest
17 голосов
/ 02 июля 2010

Функции Lua могут возвращать несколько результатов:

a, b, c = unpack({'one', 'two', 'three'})

Если меня не интересует третье возвращаемое значение, я могу игнорировать его при вызове функции:

a, b = unpack({'one', 'two', 'three'})

Есть ли подобный способ игнорировать первые элементы X при вызове функции?

Я мог бы написать этот код, если мне нужно только третье возвращаемое значение, но мне было интересно, существует ли более чистый код:

_, _, c = unpack({'one', 'two', 'three'})

1 Ответ

19 голосов
/ 02 июля 2010

Вы можете использовать функцию 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())))

...