细谈一下lua里很多人有疑问的table长度问题。
<pre name="code" class="cpp">1. > tbl = {1,2,3}
> print(#tbl)
3
>
2. > tbl = {1,nil,3}
> print(#tbl)
3
>
3. > tbl = {1,nil,3,nil}
> print(#tbl)
1
>
情况1正常,情况2有点不正常,情况3很不正常,好,先上源码。
int luaH_getn (Table *t) {
unsigned int j = t->sizearray;
if (j > 0 && ttisnil(&t->array[j - 1])) {
/* there is a boundary in the array part: (binary) search for it */
unsigned int i = 0;
while (j - i > 1) {
unsigned int m = (i+j)/2;
if (ttisnil(&t->array[m - 1])) j = m;
else i = m;
}
return i;
}
/* else must find a boundary in hash part */
else if (isdummy(t->node)) /* hash part is empty