当前位置: 首页 > 编程笔记 >

Lua中table的几种构造方式详解

慕通
2023-03-14
本文向大家介绍Lua中table的几种构造方式详解,包括了Lua中table的几种构造方式详解的使用技巧和注意事项,需要的朋友参考一下

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

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

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

0.Lua调试工具——LuaEditor

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

1.什么是table?

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

2.如何创建一个table?

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


local a = {}


这样就创建了一个table了。
(小若:噗,真够复杂的…啊,你妹啊,复杂你个头!)

3.如何初始化一个table

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


local a = {["x"] = 12, ["mutou"] = 99, [3] = "hello"}

print(a["x"]);


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

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

table间的元素用逗号分隔,["x"] = 12代表构造一个table元素,下标为”x”,值为12。(小若:为毛数组下标可以是字符串?)

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

(小若:。。。以后我不会中计了,喵…)

4.有更简洁的方式

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


local a = {x = 12, mutou = 99, [3] = "hello"}

print(a["x"]);


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

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


local a = {x = 12, mutou = 99, [3] = "hello"}

print(a.x);


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

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

记住,是字符串下标才这么做。(小若:你再说一句试试,我保证以后不帮你吐槽。)

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

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


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


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

local a = {12, 43, 45, 90}

print(a[1]);


看看a[1]输出的值是不是12?(小若:但是12的下标应该是0啊,数组下标是从0开始计算的)

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

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

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

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


local a = {

 {x = 1, y = 2},

 {x = 3, y = 10}

}


我们定义了一个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的下标:


function test()

 print("Hello Table");

end

local a = {[test] = 1}

print(a[test]);


定义了一个函数test,然后用test作为下标定义了table的一个元素,值为1。
这很奇怪不是吗?但是有时候这样确实很有用,这里暂时不解释。
OK,关于table的构造方式,暂时说这么多,有点累了,晚安。

 类似资料:
  • 本文向大家介绍Mybatis的几种传参方式详解,包括了Mybatis的几种传参方式详解的使用技巧和注意事项,需要的朋友参考一下 前言 前几天恰好面试一个应届生,问了一个很简单的问题:你了解过Mybatis中有几种传参方式吗? 没想到其他问题回答的很好,唯独这个问题一知半解,勉强回答了其中两种方式。 于是这篇文章就来说一说Mybatis传参的几种常见方式,给正在面试或者准备面试的朋友巩固一下。 单个

  • 本文向大家介绍详解Spring中bean的几种注入方式,包括了详解Spring中bean的几种注入方式的使用技巧和注意事项,需要的朋友参考一下 首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入。依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖。 Spring容器中支持的依赖注入方式主要有属性注入、构造函数注入、工

  • 本文向大家介绍C#中增强类功能的几种方式详解,包括了C#中增强类功能的几种方式详解的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要讲解如何利用C#语言自身的特性来对一个类的功能进行丰富与增强,便于拓展现有项目的一些功能。 拓展方法 扩展方法被定义为静态方法,通过实例方法语法进行调用。方法的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。仅当使用 using 指令将

  • 本文向大家介绍用 Python 连接 MySQL 的几种方式详解,包括了用 Python 连接 MySQL 的几种方式详解的使用技巧和注意事项,需要的朋友参考一下 尽管很多 NoSQL 数据库近几年大放异彩,但是像 MySQL 这样的关系型数据库依然是互联网的主流数据库之一,每个学 Python 的都有必要学好一门数据库,不管你是做数据分析,还是网络爬虫,Web 开发、亦或是机器学习,你都离不开要

  • 本文向大家介绍python线程的几种创建方式详解,包括了python线程的几种创建方式详解的使用技巧和注意事项,需要的朋友参考一下 Python3 线程中常用的两个模块为: _thread threading(推荐使用) 使用Thread类创建 说明:主线程会等待所有的子线程结束后才结束 使用Thread子类创建 为了让每个线程的封装性更完美,所以使用threading模块时,往往会定义一个新的子

  • 本文向大家介绍详解Mysql导出数据的几种方式,包括了详解Mysql导出数据的几种方式的使用技巧和注意事项,需要的朋友参考一下 MySQL导出数据的目的有很多种,如数据库备份、表结构导出、表数据导出、分析数据采取等。 Part1 select into outfile 先说最短小精悍的select into outfile, 这是小型数据库分析数据最常用的采集数据方式,具体语法如下: 【selec