2015-04-27 2 views
6

Я этот тест функция, которая просто печатает значения, переданные емуLua распаковывать() Мессинг аргументы

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 

Может кто-то объяснить это поведение для меня?

ответ

6

Это не относится к unpack. Lua Reference Manual говорит:.

«Оба вызова функции и vararg выражения могут привести несколько значений Если вызов функции используется в качестве оператора (см §3.3.6), то список возврата доводят до нулевых элементов , отбрасывая все возвращаемые значения.Если выражение используется как последний (или единственный) элемент в списке выражений, то никакая настройка не производится (если выражение не заключено в круглые скобки). Во всех других контекстах Lua настраивает список результатов для одного элемента, либо отбрасывая все значения, кроме первого, либо добавляя один ноль, если нет значений. «

(мой акцент)

+0

Спасибо. Это то, что я искал :) –

+0

Для любопытных: [где все может иметь список выражений в Lua?] (Http://stackoverflow.com/a/31782250/183120) – legends2k

Смежные вопросы