Lua基础:巧说table的几种构造方式

移动开发
之前对于Lua的研究都是纸上谈兵,没有真正的项目练手,现在公司的项目基本上都是用Lua开发,是时候补充一下我那蹩脚的Lua知识了。

[[119187]]

之前对于Lua的研究都是纸上谈兵,没有真正的项目练手,现在公司的项目基本上都是用Lua开发,是时候补充一下我那蹩脚的Lua知识了。

基础数据类型、表达式、循环结构什么的我就不说了,这么简单的东西说了也要被大家喷。

今天我想说说table的几种构造方式。

0.Lua调试工具——LuaEditor

首先,如果你是***次接触Lua,请补充一下Lua的最基本之中的基础语法(小若:O O!),然后下载一个LuaEditor工具,用来查看Lua执行效果,当然也可以调试,本篇内容不解释这个工具。下载地址:http://www.bego.cc/file/22357242 当然,也可以百度一下。

1.什么是table?

table是Lua最复杂***大的数据结构,Lua本身并不是面向对象语言,但是对面向对象中毒比较深的程序员,可以借助table”***”地模拟 面向对象编程。最简单地,我们可以把table理解为数组,最复杂的,我们可以把table理解为”世间万物”,因为它可以创造出很多你想象不到的东西。 一个字,自由度非常大~!

2.如何创建一个table?

创建table是一件很复杂的事情,不知道大家顶不顶得住,试试看,如下:local a = {}

  1. local a = {} 

这样就创建了一个table了。

3.如何初始化一个table

嗷,虽然创建table已经很复杂了,更复杂的还在后面,怎么初始化table?看看下面的代码:

  1. local a = {["x"] = 12, ["mutou"] = 99, [3] = "hello"
  2. print(a["x"]); 

在LuaEditor中创建一个lua文件,输入以上代码,保存,然后按F5运行,我们将看到输出窗口输出了一个数字:12。

这挺神奇的,感觉就像是在定义数组,不是吗?

table间的元素用逗号分隔,["x"] = 12代表构造一个table元素,下标为”x”,值为12。

嗷~!我就等旁白问这个问题,旁白你笨蛋啊,我只是说table像数组,我没有说它就是数组,table支持几乎是所有类型的下标,包括函数。

4.有更简洁的方式

这种初始化方式看起来太复杂了,有没有简单点的?看看下面的代码:

  1. local a = {x = 12, mutou = 99, [3] = "hello"
  2. print(a["x"]); 

运行结果仍然是输出12,也就是说,对于字符串下标,我们可以省略方框和双引号,但是数字下标不可以,千万不要搞混了。

但是,a["x"]这种调用方式也很烦人不是吗?程序员都很懒的,所以Lua支持一下这种方式的调用:

  1. local a = {x = 12, mutou = 99, [3] = "hello"
  2. rint(a.x); 

输出结果仍然是12,也就是说,对于字符串下标,可以直接用a.x的形式调用,也是省略了方框和双引号,初始化和调用方式的规则一样,这样大家就不会搞混了,记住,是字符串下标才这么做。

记住,是字符串下标才这么做。

记住,是字符串下标才这么做。

5.想要默认数字索引怎么办?

如果说,大家习惯了数组,用数字下标,又不想自己一个个数字地定义,比如:

  1. local a = {[1] = 12, [2] = 43, [3] = 45, [4] = 90

没关系,Lua又为爱偷懒的程序员提供了一招,如下:

  1. local a = {12434590
  2. print(a[1]); 

看看a[1]输出的值是不是12?

再一次警告旁白,table类似数组,但它绝对不是数组。

table默认的***个索引下标是1,并且很多相关的函数也假设table的***个索引下标为1,所以大家***遵守这个规则。

6.更强大的应用之table的table

table什么都能放,当然也能放table了,如下:

  1. </pre> 
  2. local a = { 
  3.  {x = 1y = 2}, 
  4.  {x = 3y = 10
  5. print(a[1].x); 
  6. <pre> 

我们定义了一个table,命名为a,table有两个元素,分别是两个没有名字的table,根据第5条所说的规则,没有显示指定下标,那Lua就会默认给table的元素赋予下标(从1开始)。

因此,a的***个元素就是{x = 1, y = 2},调用a的***个元素的方式为:a[1]

由于a[1]又是一个table,所以,再次调用table的x下标的值:a[1].x

这样就OK了。

7.更强大的应用之函数下标

我们***来试试更好玩的,用一个函数当table的下标:

  1. </pre> 
  2. function test() 
  3.  print("Hello Table"); 
  4. end 
  5.   
  6. local a = {[test] = 1} 
  7. print(a[test]); 
  8. <pre> 

定义了一个函数test,然后用test作为下标定义了table的一个元素,值为1。

这很奇怪不是吗?但是有时候这样确实很有用,这里暂时不解释。

OK,关于table的构造方式,暂时说这么多,有点累了,晚安。

本文来自[笨木头与游戏开发]

原文地址:http://www.benmutou.com/archives/627

责任编辑:闫佳明 来源: benmutou
相关推荐

2009-12-11 09:20:09

Visual Stud

2021-05-07 16:19:36

异步编程Java线程

2010-06-10 13:00:18

RIP协议

2010-09-25 14:48:55

SQL连接

2021-01-19 11:56:19

Python开发语言

2023-02-08 08:43:55

前端继承原型

2023-09-07 13:21:00

Linux软件

2021-06-16 07:02:22

Python方式邮件

2021-10-07 20:36:45

Redis集群场景

2010-11-24 09:56:20

mysql拷贝表

2021-08-02 11:13:28

人工智能机器学习技术

2010-08-17 10:22:09

路由器故障

2010-04-13 11:13:02

2011-08-23 15:02:59

LuaTable

2024-05-10 07:44:23

C#进程程序

2019-04-30 10:00:59

CSS居中前端

2011-06-20 10:36:29

SEO

2021-01-06 08:04:30

Linux方式提权

2010-07-30 09:16:24

Flex数据绑定

2020-07-14 09:58:01

Python开发工具
点赞
收藏

51CTO技术栈公众号