Lua unpack() возиться с аргументами

У меня есть эта тестовая функция, которая просто печатает значения, переданные ей

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

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

1 ответ

Решение

Это поведение не относится к unpack, Справочное руководство Lua гласит:

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

(мой акцент)

Другие вопросы по тегам