【Lua】 Lua学习笔记(六)

零、相关文章

【Lua】 Lua学习笔记(一)
【Lua】 Lua学习笔记(二)
【Lua】 Lua学习笔记(三)
【Lua】 Lua学习笔记(四)
【Lua】 Lua学习笔记(五)

一、前言

哈喽大家好,我是 FEZ98 ,今天继续系统学习Lua。这个系列是我系统学习Lua语言的学习笔记,我会把遇到的一些比较值得记录与关注的知识写在里面,供自己以后进行回顾。

二、 Lua table(表)

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如数组,字典等。其使用关联型数组,可以用任意类型的值来作为数组的索引,但这个值不能是 nil。table 的大小不是固定的,可以根据需要添加长度。
Lua 也是通过 table 来解决模块(module)、包(package)和对象(Object)的。例如 string.foormat 表示使用 “format” 来索引table string。

(2.1) table 的构造

构造器是创建和初始化表的表达式。表是 Lua 特有的数据结构。
最简单的构造函数是{},可以用来创建一个空表,也可用来初始化数组。

实例:
在这里插入图片描述
在这里插入图片描述
如上图所示,我们创建一个表 myTable 并初始化后,当我们将 myTable 赋值给 otherTable 时,两个表的都指向同一个内存,如果 myTable设置为 nil , otherTable 仍能访问 table 中的元素,如果没有指定的变量指向 myTable,Lua 的垃圾回收机制会清理对应的内存。

(2.2) Table的操作

在这里插入图片描述

(2.2.1)table.concat()

在这里插入图片描述

(2.2.2)table.insert()

在这里插入图片描述

(2.2.3)table.remove()

在这里插入图片描述

扫描二维码关注公众号,回复: 16895917 查看本文章

(2.2.4)table.sort()

在这里插入图片描述

table.sort() 中的第二个参数comp是一个排序函数,如果我们想要按特定顺序对表的元素进行排序,则使用该函数提供逻辑,该排序函数接收两个参数,并且如果第一个参数应该在排序数组中排在第一位,则必须返回 true。如果未提供此函数,排序将使用默认的小于运算(对应于“<”运算符)。

在这里插入图片描述

(2.2.5)table.maxn()

table.maxn 在 Lua5.2 之后该方法已经不存在了,我们定义了 table_maxn 方法来实现。
在这里插入图片描述

(2.2.6)获取 table 长度

当我们获取 table 的长度的时候无论是使用 # 还是 table.getn 其都会在索引中断的地方停止计数,而导致无法正确取得 table 的长度。(table.getn()是已弃用的 Lua 函数!)
在这里插入图片描述
可以用以下方法替代:
在这里插入图片描述

三、Lua 模块与包

模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。

Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。

创建自定义的 Lua 模块如下:
在这里插入图片描述

由上可知,模块的结构就是一个 table 的结构,因此可以像操作调用 table 里的元素那样来操作调用模块里的常量或函数。
上面的 privateFunc() 声明为程序块的局部变量,即表示一个私有函数,因此是不能从外部访问模块里的这个私有函数,必须通过模块里的公有函数来调用.

(3.1)require 函数

Lua 中使用 require() 函数来加载模块。语法如下:
在这里插入图片描述
也可以给加载的模块定义一个别名变量,方便调用:
在这里插入图片描述

(3.2)加载机制

对于自定义的模块,模块文件不是放在哪个文件目录都行,函数 require 有它自己的文件路径加载策略,它会尝试从 Lua 文件或 C 程序库中加载模块。
require 用于搜索 lua 文件的路径是存放在全局变量 package.path 中,当 Lua 启动后,会以环境变量 LUA_PATH 的值来初始这个环境变量。如果没有找到该环境变量,则使用一个编译时定义的默认路径来初始化。之后如果找到文件,则通过 package.loadfile 来加载模块。
require 用于搜索 .dllso 文件的路径是存放在全局变量 package.cpath 中,而这个变量则是通过环境变量 LUA_CPATH 来初始化。之后如果找到文件,则通过 package.loadlib 来加载模块。
以下博客有更加详细的介绍:
runoob-Lua:模块与包
lua require路径设置实例

实例(Lua 加载模块与模块的使用
在这里插入图片描述

(3.3)C 包

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43057990/article/details/132294874
LUA