Lua “table.pack”向表中添加的“n”字段的用途?见鬼,为什么“table.pack”还存在?

Lua “table.pack”向表中添加的“n”字段的用途?见鬼,为什么“table.pack”还存在?,lua,lua-table,Lua,Lua Table,标题说明了一切。我想知道为什么Lua在使用table.pack时会在表中添加一个n字段 从字面上看,这就是您可以实现的方式: function pack(...) return { n = select("#", ...), ... } end -- pretty useless 我看不出有什么意义,因为你可以用{}来构造一个表,用tbl来得到一个表中有多少元素 local tbl = table.pack('a', 'b', 'c', 'd') print(tbl.n, #{ 'a

标题说明了一切。我想知道为什么Lua在使用table.pack时会在表中添加一个n字段

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

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您可以使用IPAIR,但对于那些不使用IPAIR的人?Oh和length运算符不计算n.

不需要返回序列。它只在所有参数都为非零时才这样做

因此,如果要反转它,在一般情况下需要n成员

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

不需要返回序列。它只在所有参数都为非零时才这样做

因此,如果要反转它,在一般情况下需要n成员

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

local tbl=table.pack'a',b',nil',d',nil printtbl.n,{'a','b','c','d'}-5 2 -很不一样 给你。是的,它很容易实现,但这并不意味着每个项目都需要手工实现

如果使用next遍历使用table.pack构建的表,它实际上会破坏迭代

是的,这就是为什么不使用next来迭代序列。改用ipairs,这就是它的用途

next在PUC和JIT方面都比ipairs慢 下一步不按顺序迭代 使用ipairs是Lua惯例 哦,长度算符不会算n

默认情况下不会,但您可以编写一个实现这一点的元方法,这真的没什么大不了的

局部元={uuuu len=functionself返回self.n或rawlenself-end} PrintSetMetaTable.pack'a',b',nil',d',nil-5 本地tbl=表。包'a','b',无,'d',无 printtbl.n,{'a','b','c','d'}-5 2 -很不一样 给你。是的,它很容易实现,但这并不意味着每个项目都需要手工实现

如果使用next遍历使用table.pack构建的表,它实际上会破坏迭代

是的,这就是为什么不使用next来迭代序列。改用ipairs,这就是它的用途

next在PUC和JIT方面都比ipairs慢 下一步不按顺序迭代 使用ipairs是Lua惯例 哦,长度算符不会算n

默认情况下不会,但您可以编写一个实现这一点的元方法,这真的没什么大不了的

局部元={uuuu len=functionself返回self.n或rawlenself-end} PrintSetMetaTable.pack'a',b',nil',d',nil-5