2015-04-27 24 views
6

Sadece değerlerini yazdırır bu test fonksiyonuLua açmak() karıştırmasını argümanlar

function test1(...) 
    for k, v in ipairs(arg) do 
    print(v)  
    end 
end 

function test2(...) 
    for k, v in pairs(arg) do 
    print(v)  
    end 
end 

-- GOOD behavior 
test1(1, 2, 3, 4) -- produces 1 2 3 4 
test2(1, 2, 3, 4) -- produces 1 2 3 4 

-- BAD behavior 
test1(unpack({1,2}), 3, 4) -- produces 1 3 4 
test2(unpack({1,2}), 3, 4) -- produces 1 3 4 3 

biri bana bu davranışı açıklayabilir kendisine geçti?

cevap

6

Bu davranış, unpack için belirli değildir. Lua Reference Manual diyor:.

"işlev çağrılarının ve vararg ifadeleri Hem çoklu değerlere neden olabilir bir işlev çağrısı yapılan açıklamada (bkz §3.3.6) olarak kullanılırsa, daha sonra dönüş liste elemanları sıfır ayarlanır Bu nedenle, tüm döndürülen değerleri atarsanız, bir ifade ifadesinin son (veya tek) öğesi olarak bir ifade kullanılırsa, hiçbir ayar yapılmaz (ifade parantez içinde değilse) .Diğer tüm bağlamlarda, Lua ayarlar sonuç listesi, birinciden hariç tüm değerleri atmadan veya değer yoksa tek bir nil ekleyerek bir öğe için "

(Benim vurgularım)

+0

Teşekkürler. Aradığım şey buydu :) –

+0

Merak için: [Lua'da ifadelerin bir listesi nerede olabilir?] (Http://stackoverflow.com/a/31782250/183120) – legends2k