2010-07-02 11 views
12

Lua işlevleri birden çok sonuç döndürebilir: Benzer bir var mıdırLua'daki bir işlevden ilk sonuçları nasıl yok sayabilirim?

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

: Ben üçüncü dönüş değeri ilgilenmiyorum Eğer

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

, ben işlevi çağrılırken bunu görmezden seçebilirsiniz fonksiyonu çağırırken X ilk öğeleri görmezden gelmek yolu?

Ben sadece üçüncü dönüş değeri istiyorsanız bu kod yazmak, ancak daha temiz bir kod var merak ediyordum:

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

cevap

13

Sen select işlevini kullanabilirsiniz. index'dan sonra tüm argümanları döndürür; burada index, select'a verilen ilk argümandır.

Örnekler:

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 

söyledi, ben _,_,c = f() temizleyici yazma, çoğu durumda düşünüyorum. select, argüman numarası önceden bilinmediğinde veya zincirleme fonksiyonu bir araya geldiğinde (örneğin, f(select(2, g())))

+0

Tam olarak ne aradığımda yararlıdır, teşekkürler! –

İlgili konular