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确实挺难调的。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/song527730241/article/details/54925990

深入浅出Lua编程实战视频课程:(2)protocol buffer在lua中的使用

本系列课程对protocol buffer如何在c++,java,lua中的使用,重点讲解在lua中的使用
  • 2017年03月16日 21:59

Lua中table的基本用法

个人体会,有错就认,立正挨打 创建 local a = {} 初始化 local a = {["1"] = 12, ["zhuojian"] = 99, [3] = "hello"} 这里有两种索引...
  • u014298049
  • u014298049
  • 2016-11-24 11:19:27
  • 398

【Lua】Lua中的Table操作

Lua中table类似与C#种的字典,其实就是一个key-value键值对数据结构.来学习下table基本操作 Table的创建 myTable = {} ...
  • sinat_20559947
  • sinat_20559947
  • 2015-08-28 10:19:12
  • 6115

Lua基础之table详解

概要:1.table特性;2.table的构造;3.table常用函数;4.table遍历;5.table面向对象...
  • dingkun520wy
  • dingkun520wy
  • 2015-12-13 15:46:09
  • 15409

lua(5)-table(表)

table(表)是lua中唯一的数据结构,用table可以实现模块(module)、包(package)和对象(object)的表示。比如io.read中的io就是一个模块,read就是io模块中的一...
  • Yueya_Shanhua
  • Yueya_Shanhua
  • 2016-08-12 14:46:57
  • 743

lua数据结构之table的内部实现

lua之table的内部实现
  • zr339361504
  • zr339361504
  • 2016-09-10 22:00:15
  • 5597

lua学习之table类型

关系表类型,这是一个很强大的类型。我们可以把这个类型看作是一个数组。只是 C语言的数组,只能用正整数来作索引; 在Lua中,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。同样,在C语言中...
  • booirror
  • booirror
  • 2012-08-18 22:23:27
  • 57818

Lua中table类型源码分析

tables的实现被分成了两个部分: 核心由ltable.c完成,提供了table的基本存取方法, 外部table库(ltablib.c)提供了辅助操作接口(concat, foreach, fore...
  • u012611878
  • u012611878
  • 2016-07-12 00:38:59
  • 6083

lua中使用json:table转json与json转table

直接上代码: json.lua ----------------------------------------------------------------------------- -- JSO...
  • e421083458
  • e421083458
  • 2015-03-04 18:55:50
  • 21056

lua中遍历table的几种方式比较

前两种是泛型遍历,后两种是数值型遍历。当然你还会说lua的table遍历还有很多种方法啊,没错,不过最常见的这些遍历确实有必要弄清楚。 这四种方式各有特点,由于在工作中我几乎每天都会使用遍历t...
  • heyuchang666
  • heyuchang666
  • 2016-03-29 10:28:03
  • 4773
收藏助手
不良信息举报
您举报文章:lua中的table使用陷阱
举报原因:
原因补充:

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