Как я могу игнорировать первые результаты из функции в LUA?

StackOverflow https://stackoverflow.com/questions/3165845

  •  02-10-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

_, _, c = unpack({'one', 'two', 'three'})
Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top