首页 > 解决方案 > `table.pack` 将`n` 字段添加到表中的目的?哎呀,为什么`table.pack`甚至存在?

问题描述

标题说明了一切。我想知道为什么 Luan在使用table.pack().

从字面上看,这是您可以实现的方式:

function pack(...)
    return { n = select("#", ...), ... }
end

-- pretty useless

我看不到一点,因为您可以使用它{}来构建表格并#tbl获取表格中有多少元素。

local tbl = table.pack('a', 'b', 'c', 'd')
print(tbl.n, #{ 'a', 'b', 'c', 'd' }) -- 4    4

-- Same thing

如果你next用来遍历一个用 构建的表table.pack,它真的会破坏迭代。Ofc 你可以使用ipairs,但对于那些不使用的人?哦,长度运算符不会计算在内n

标签: lualua-table

解决方案


table.pack()不需要返回一个序列。只有当所有参数都是非nil.

因此,如果你想反转它,你需要"n"-member 在一般情况下。

table.unpack(t, 1, t.n)

尽管实现非常简单,但table.pack()它仍然是一个有用的抽象。


推荐阅读