Lua中关于可变参数和ipairs,pairs之间的疑惑 , 参数长度到底是几?

函数可变参数 ...

如果传入1,2,3。 3个参数

用#打印arg长度为3

如果用ipairs遍历arg的值,得到的是1,2,3

但如果用pairs遍历arg的值,得到的却是1,2,3,3,最后一位为长度

用变量接收 ... 以后 , 用pairs遍历 , 却是1,2,3

这样为什么#打印出来的长度不为4 , 用变量接收之后发生了什么??

test(1,2,3)
function test(...)
    print(#arg)  --长度为3

    for k,v in pairs(arg) do
            print(v)--得到结果1,2,3,3
    end

    for k,v in ipairs(arg) do
            print(v)--得到结果1,2,3
    end

    local var = {...}
    for k,v in pairs(var) do
            print(v)--得到结果1,2,3
    end
end