2010-07-02 27 views
12

Lua函數可以返回多個結果:如何忽略Lua中函數的第一個結果?

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

如果我不感興趣,在第三返回值,我可以選擇調用函數時忽略它:

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

是否有類似調用函數時忽略X個第一個元素的方法?

如果我只想第三返回值,我可以寫這樣的代碼,但我不知道是否存在更乾淨的代碼:

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

回答

13

可以使用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()))

+0

確切地說我在找什麼,謝謝! – 2010-07-02 13:21:03