1.软文推荐

2.软文推荐

3.软文推荐

官方文档是这么描述 # 的:取长度操作符写作一元操作 #。 字符串的长度是它的字节数(就是以一个字符一个字节计算的字符串长度)。

table t 的长度被定义成一个整数下标 n 。 它满足 t[n] 不是 nil 而 t[n+1] 为 nil; 此外,如果 t[1] 为 nil ,n 就可能是零。 对于常规的数组,里面从 1 到 n 放着一些非空的值的时候, 它的长度就精确的为 n,即最后一个值的下标。 如果数组有一个”空洞” (就是说,nil 值被夹在非空值之间), 那么 #t 可能是指向任何一个是 nil 值的前一个位置的下标 (就是说,任何一个nil 值都有可能被当成数组的结束)。

local tblTest2 =
{
   1,
   a = 2,
   3,
}

print(table.getn(tblTest2))

这段代码输出的结果是多少?这里的输出结果应该是 2。首先,要明白,这个ctblTest2c不是一个简单的ctable,它混合了列表(list)和记录(record)两种风格,表中,a = 2 是 record 风格。其次,要明白,record 风格的 record 是不作为外表的长度计算。你可以把它想象成一个函数,跟其他面向对象语言一样,函数是不记为内部变量的。

既然像函数一样,那就可以输出a的值,是的。print(tblTest2.a) 就可以了。

再看下面的代码:

local tblTest3 =
{
   1,
   {a = 2},
   3,
}

print(table.getn(tblTest3))

这段代码输出的结果是多少?这里的输出结果应该是 3。要注意,表嵌套表,嵌套表也是元素。所以,输出的结果是 3。

table.getn(t) 等价于 #t。

以下情况相当纠结,可直接看最后一句话总结:

现在来看一个比较纠结的:

local tblTest4 =
{
   1,
   nil,
}

print(table.getn(tblTest4))

这段代码输出的结果是多少?是1。我们都知道table获取长度的时候,会遍历一下整个表,在最后一个非nil处,就会返回。

但是,下面这段代码呢?

local tblTest5 =
{
   1,
   nil,
   2,
}

print(table.getn(tblTest5))

输出 3,好玩吧?它把 nil 也当成元素计算长度了。但叫你摸不着头脑的是下面这段代码:

local tblTest5 =
{
   1,
   nil,
   2,
   nil
}

输出1.再发一段,让你完全蒙掉:

local tblTest5 =
{
   1,
   nil,
   2,
   nil,
   3,
   nil
}

输出 3,蒙了没?再看,这一段叫你以后再也不敢在 table 中写 nil 值:

local tblTest5 =
{
   1,
   nil,
   2,
   nil,
   3,
   nil,
   4,
   nil
}

看看吧,这一段的输出结果是 1。亲,请问,你以后还敢在 lua 的 table 中用 nil 值吗???如果你继续往后面加 nil,你可能会发现点什么。你可能认为你发现的是个规律。但是,你千万不要认为这是个规律。因为这是错误的。

在 table 中不要使用 nil
如果非要使用 nil,必须用 table.setn() 函数去设置这个 table 表的长度。注意:新版本的 lua 已经不支持 setn了。

必须给你个结论:setn 函数已过时,不要在 lua 的 table 中使用 nil 值,如果一个元素要删除,直接 remove,不要用 nil 去代替。

本文来源:www.lxlinux.net/9335.html,若引用不当,请联系修改。

相关文章 8

1

RangCloud:香港NAT建站VPS限时8折优惠中,1核/1G/40G/2Mbps/月付22.4元 3分钟前

RangCloud是一家今年新成立的主机商家,不过商家主要的业管为NAT机器,有广州、江苏、香港等延时比较低的区域,也有美国机房,之前本站...

2

阿克苏网站建设公司/阿克苏企业建站/小程序开发/网站制作报价(阿克苏信息发布平台) 4分钟前

易探云提供分享阿克苏网站建设品牌及网络营销,专业领域包括阿克苏网站建设公司,提供高品质阿克苏网站建设,阿克苏APP开发,阿克苏小程...

3

Vultr:新增第22个数据中心,位于西班牙马德里 7分钟前

早在本月19号,Vultr就宣布增加了西班牙马德里数据中心,但是近期一直比较忙,也没有过多地关注和及时发布信息。国外主机测评也将在稍...

4

Linux下安装并使用Hping 9分钟前

Hping是一个命令行下使用的TCP/IP数据包组装/分析工具,其命令模式很像Unix下的ping命令,但是它不是只能发送ICMP回应请求,它还可以支持T...

5

DediPath:全场VPS/HybridServers5折优惠,美国独立服务器月付$39起 10分钟前

DediPath目前推出了Memorial Day活动,针对VPS、Hybrid Servers、Dedicated Servers等产品提供5折永久折扣,测试目前依然有效,进针对新购用户,并且不...

6

cPanel&WHM控制面板快速创建MySQL数据库的方法 13分钟前

cPanel WHM是Linux操作系统中最流行的Web主机控制面板之一,使用cPanel WHM我们可以很容易地管理网络托管环境,而无需更多的技术技能,操作简...

7

浙江杭州财务外包的公司(浙江杭州财务公司) 15分钟前

广州合优网络科技有限公司 让您的网站走在互联网的前端!以最佳的用户体验,让客户随时随地找到您!所谓响应式网页建设,是指可以自...

8

上海长宁区展示型网站制作哪家好(上海长宁区新闻) 16分钟前

合优网络成立于2007年,立足广东,服务全国,是广东省高新技术企业,获30余项技术专利,并连续多年获得守合同重信用企业称号。一直凭...