lua中的table使用陷阱

原创 2017年02月08日 14:10:21

    最近在使用lua开发的过程中,遇到了一个由于语言机制导致的bug,具体表现就是,我的配置文件中存了个两个表项,在用lua加载配置文件内容之后,返回的表长度竟然是1,然后导致后面的判断都出错了,在初次调试这个bug的时候完全是百思不得其解,把配置文件看了又看,确实有两个表项没错,但是通过#运算符得到的表长度始终是1,于是我用公司同事写的一个打印table模块将返回的table的键和值都打印出来看了一下,于是就发现问题了。

    原来在lua中,如果我这样声明:

local a = {}
a[1] = 1
a[2] = 2
a[4] = 4
print(#a)

那么输出的结果就是2,而不是3,这就是比较疑惑的地方了,因为我们明明知道表里面明明有三个元素,但是输出的表长度却是2,这就是因为#这个运算符只能处理下标连续的table,这里我们声明的时候没有下标为3的元素,所以lua在计算长度的时候就不会去看不连续的元素了,这也提醒了我们开发者,对于#操作符一定要慎重使用,否则因为这种问题导致的bug确实挺难调的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

lua 中table的使用和分析

1.table有4种基本操作:读,写,迭代和获取长度。 lua中没有删除操作而是将对应键位的值设置为nil. lua的内部定义是在lobject.h /* ** Tables */ typed...

Lua Table类型的使用

关系表类型,这是一个很强大的类型。我们可以把这个类型看做是一个数组。只是C语言的数组,只能用正整数来做索引;在Lua中,你可以用任意类型来作数组的索引,除了nil。同样,在C语言中,数组的内容只允许一...
  • pingD
  • pingD
  • 2012年09月12日 17:38
  • 4140

Lua中table的使用

原文地址:http://www.yiibai.com/lua/lua_tables.html 表格是唯一的数据结构中Lua可以帮助我们创造出不同的类型,如数组和字典。 Lua使用关联数组和可不仅数字...
  • hp_cpp
  • hp_cpp
  • 2015年11月25日 20:14
  • 79

lua库函数整合。math table string

  • 2016年03月25日 15:07
  • 148KB
  • 下载

excel 转lua table

  • 2016年04月29日 18:15
  • 2KB
  • 下载

Lua编码的那些陷阱 转

字符串连接符 “..” 当需要把多个小字符串拼接成一个大串的时候,例如,从一个sql结果集中取某列元素并将该元素组成以‘/’分割的字符串。 如果sql结果集是上万行,那么就会发现效率越来越...

Json转换成lua table

  • 2015年07月24日 12:58
  • 101KB
  • 下载

【quick遇到的陷阱】lua 全局

lua没有所谓私有共有(当然这个是可以实现的),但是有全局和局部,但是这两对可一点都不像。 ---------------------------全局帧事件 我们想使用update(),很好,qu...
  • hqq39
  • hqq39
  • 2016年01月06日 00:28
  • 577

lua中求table长度

关于lua table介绍,看以前的文章http://www.cnblogs.com/youxin/p/3672467.html。 官方文档是这么描述#的: 取长度操作符写作一元操作 #。...

Lua中的table函数库

一部分的table函数只对其数组部分产生影响, 而另一部分则对整个table均产生影响. 下面会分开说明.  table.concat(table, sep,  start, end) ...
  • bytxl
  • bytxl
  • 2015年02月17日 13:54
  • 341
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:lua中的table使用陷阱
举报原因:
原因补充:

(最多只允许输入30个字)