迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。在 Lua 中我们
常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素。常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素。
闭包和迭代器
迭代器需要保留上一次成功调用的状态
迭代器需要保留下一次成功调用的状态
我们知道闭包可以保留每次调用的状态。并且可以方便的访问局部变量;所以我们也可以使用闭包来构建迭代器。还记得我们在做for循环遍历表时的pairs(t)的迭代器吗?我们尝试自己来写一个迭代器:
12345678910111213141516171819202122-- 迭代器local function list_iter(t) local i=0 local n=#t return function () i=i+1 if i<=n then return t[i] end endendlocal t={4,5,8} --创建表local iter = lis ...
函数可以完成2件事,完成工作或者计算并返回结果。
函数语法
function func_name (arguments-list)
statements-list
end
Ps:Lua 使用的函数可以是 Lua 编写也可以是其他语言编写,对于 Lua 程序员来说用什么语言实现的函数使用起来都一样。
function Show(a)
print(a)
end
Show(100)
返回多个值
在lua中函数可以返回多个值,例如 string.find,其返回匹配串“开始和结束的下标”(如果不存在匹配串返回 nil)。
s, e = string.find("hello Lua users", "Lua")
print(s, e) --> 7 9
计算最大值和最大值的索引
12345678910111213function MaxM(arr) local maxIndex=1 local max=arr[maxIndex] for key, value in pairs(arr) do if value>max then ...
构建表
构造器是创建和初始化表的表达式。表是 Lua 特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:表的序号从1开始,并非0。Ps:假如空引用,lua也不会报错,会输出nil。
12local numbers={1,2,3,4,5,6,7,8,9,0}print("numbers数据:"..tostring(numbers[1])) -- 输出1
构建自定义对象
1234local arr={}arr.name='xiao'arr.age=16print('arr的数据:'..' name:'..arr.name..' age: '..arr.age)
表的组成
表,可以包含任何类型的元素,也可以嵌套
1arr={x=0,tip='text',func=print}
构造注意事项
如果真的需要索引从0开始:Ps:极力不推荐这么做,这么做将不能使用很多 ...
本系列将从零开始学习Lua的基本语法,用于之后使用xLua进行unity热更新~
使用Vscode开发Lua
至少要下载Lua和LuaDebug这2个扩展~看到LuaDebug的作者actboy168,我有点惊讶,actboy168是大名鼎鼎的ydwe作者之一,在以前自己玩we的时候用的编辑器就是actboy168大佬的,后面听说支持lua来代替jass编写游戏逻辑(那时候已经弃坑~);好的,闲话不多说,我们来编写我们的第一个脚本。
创建一个空文件夹并用vscode打开
创建一个test.lua文件
编写一行代码 print("Hi,Lua~")(也可以使用'' 单引号)
基本使用
数据类型
在lua中和python类型可以直接声明并使用,无需使用类型名,lua自动分析数据类型。lua的数据类型为(8个):
nil 空
boolean 布尔型
number 数字型
function 函数型
string 字符串型
userdata 用户自定义类型
thread 线程型
table 表型
可以使用type()来查看类型~Ps:在lua中不强制使用;结尾
-- ...





