先来看luatable源码长度获取部分(ltable.c)j是数组部分的长度。首先判断数组长度大于0,并且数组最后一个是nil,就用二分法查找,返回长度。如果t->node是table的hash部分存放,如果是空,就返回数组的长度。第一种例子:对于这种,初始化了数组长度,t的长度是7,为什么呢。因为最后一位不是nil以下情况t的长度就是5。第二种例子:大家都应该知道t的长度是5。这样的话,t的长度是多少呢???答案是2,为什么呢?对于t[6]的插入,导致table表rehash。t[6]会先调用(lapi.c)然后会进入(lvm.c)然后会调用(ltable.c)luaH_newkey这个函数