Lua解压过程中出现的问题如何解决?

2026-06-05 10:365阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计568个文字,预计阅读时间需要3分钟。

Lua解压过程中出现的问题如何解决?

在Lua中打包功能时,我偶然发现了一个有趣的特性。创建两个table:

luatable1={true, nil, true, false, nil, true, nil}table2={true, false, nil, false, nil, true, nil}

a1, b1, c1, d1, e1, f1, g1=unpack(table1)print(table1:, a1, b1, c1, d1, e1, f1, g1)

输出结果为:

table1: true nil true false nil true nil

我在Lua打包功能中偶然发现了一个奇怪的行为

table1 = {true, nil, true, false, nil, true, nil} table2 = {true, false, nil, false, nil, true, nil} a1,b1,c1,d1,e1,f1,g1 = unpack( table1 ) print ("table1:",a1,b1,c1,d1,e1,f1,g1) a2,b2,c2,d2,e2,f2,g2 = unpack( table2 ) print ("table2:",a2,b2,c2,d2,e2,f2,g2)

输出:

table1: true nil true false nil nil nil table2: true false nil nil nil nil nil

第二个解包可以将参数提供到第一个零值.我可以和他一起生活
第一张桌子提供4张?一个参数在中间为零.它有4个参数不为零,但不是显示的参数.

有人可以解释一下吗
这是使用codepad.org和lua 5.1进行的

可以通过指定unpack()的开始和结束索引并使用table.maxn()作为结束索引来简单地解决问题:

table1 = {true, nil, true, false, nil, true, nil} a1,b1,c1,d1,e1,f1,g1 = unpack( table1, 1, table.maxn(table1) ) print ("table1:",a1,b1,c1,d1,e1,f1,g1) -->table1: true nil true false nil true nil

关于如何处理两个表的差异的真正原因在于确定表的数组部分的长度的逻辑.

Lua解压过程中出现的问题如何解决?

luaB_unpack()函数使用luaL_getn(),它根据调用luaH_getn()表的lua_objlen()定义. luaH_getn()查看数组的最后一个位置,如果没有对表中的边界执行二进制搜索(“这样t [i]不为零,t [i 1]为零”) .对数组结尾的二进制搜索是表1与table2不同的处理原因.

这只应该是一个问题,如果数组中的最后一个条目是nil.

从Programming in Lua(第16页)(你应该买这本书.):
当一个数组有一个空洞 – 其中的零元素时,长度运算符可以采用任何这些零元素作为结束标记.因此,您应避免在可能包含漏洞的数组上使用长度运算符.

unpack()使用长度运算符lua_objlen(),“lu”可以将数组中的任何“零”元素作为结尾“.

本文共计568个文字,预计阅读时间需要3分钟。

Lua解压过程中出现的问题如何解决?

在Lua中打包功能时,我偶然发现了一个有趣的特性。创建两个table:

luatable1={true, nil, true, false, nil, true, nil}table2={true, false, nil, false, nil, true, nil}

a1, b1, c1, d1, e1, f1, g1=unpack(table1)print(table1:, a1, b1, c1, d1, e1, f1, g1)

输出结果为:

table1: true nil true false nil true nil

我在Lua打包功能中偶然发现了一个奇怪的行为

table1 = {true, nil, true, false, nil, true, nil} table2 = {true, false, nil, false, nil, true, nil} a1,b1,c1,d1,e1,f1,g1 = unpack( table1 ) print ("table1:",a1,b1,c1,d1,e1,f1,g1) a2,b2,c2,d2,e2,f2,g2 = unpack( table2 ) print ("table2:",a2,b2,c2,d2,e2,f2,g2)

输出:

table1: true nil true false nil nil nil table2: true false nil nil nil nil nil

第二个解包可以将参数提供到第一个零值.我可以和他一起生活
第一张桌子提供4张?一个参数在中间为零.它有4个参数不为零,但不是显示的参数.

有人可以解释一下吗
这是使用codepad.org和lua 5.1进行的

可以通过指定unpack()的开始和结束索引并使用table.maxn()作为结束索引来简单地解决问题:

table1 = {true, nil, true, false, nil, true, nil} a1,b1,c1,d1,e1,f1,g1 = unpack( table1, 1, table.maxn(table1) ) print ("table1:",a1,b1,c1,d1,e1,f1,g1) -->table1: true nil true false nil true nil

关于如何处理两个表的差异的真正原因在于确定表的数组部分的长度的逻辑.

Lua解压过程中出现的问题如何解决?

luaB_unpack()函数使用luaL_getn(),它根据调用luaH_getn()表的lua_objlen()定义. luaH_getn()查看数组的最后一个位置,如果没有对表中的边界执行二进制搜索(“这样t [i]不为零,t [i 1]为零”) .对数组结尾的二进制搜索是表1与table2不同的处理原因.

这只应该是一个问题,如果数组中的最后一个条目是nil.

从Programming in Lua(第16页)(你应该买这本书.):
当一个数组有一个空洞 – 其中的零元素时,长度运算符可以采用任何这些零元素作为结束标记.因此,您应避免在可能包含漏洞的数组上使用长度运算符.

unpack()使用长度运算符lua_objlen(),“lu”可以将数组中的任何“零”元素作为结尾“.