Lua “table.pack”向表中添加的“n”字段的用途?见鬼,为什么“table.pack”还存在?
标题说明了一切。我想知道为什么Lua在使用table.pack时会在表中添加一个n字段 从字面上看,这就是您可以实现的方式: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
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