一直以来,以为lua的#符号获取到的是一个连续表中非空的前一个下标。
比如#{1,2,nil,4,5}获取到的长度为2.但是今天在做一个测试的过程中发现#获取到的并不一定是这个值。
查看相关官方文档发现,#获取到的是其遍历到的第一个后面是nil值的元素下标。
而#遍历lua表的时候并非是按照顺序从1到n这样的遍历顺序,而是按照hash表来遍历的(估计是按表在内存里的地址下标顺序遍历的,为了节省性能?)所以在表中有多个nil的时候,#{...}可能返回任意一个nil前面的下标。
一直以来,以为lua的#符号获取到的是一个连续表中非空的前一个下标。
比如#{1,2,nil,4,5}获取到的长度为2.但是今天在做一个测试的过程中发现#获取到的并不一定是这个值。
查看相关官方文档发现,#获取到的是其遍历到的第一个后面是nil值的元素下标。
而#遍历lua表的时候并非是按照顺序从1到n这样的遍历顺序,而是按照hash表来遍历的(估计是按表在内存里的地址下标顺序遍历的,为了节省性能?)所以在表中有多个nil的时候,#{...}可能返回任意一个nil前面的下标。