Lua编程
Lua编程知识!
程序员乐逍遥
15年C/C++开发经验资深程序员、想跟我学编程的可以观看我精心录制的视频课程!
展开
-
Lua面向对象写Student类( 模拟类方法与对象方法)
前面我们写出了一个简单的类Student,但是我们发现,我们直接使用Student也可以调用对象方法,这里和我们们学过的其它语言的面向对象还是有些出入的(比如C++,JAVA ,C# , 类名称是无法调用对象的方法与属性),所以这里改造一下,让类方法、类变量, 与 对象方法,对象变量 分离。代码如下:-- 定义类型Student = {}; -- 定义类型属性(相当于静态成...原创 2019-04-20 19:08:44 · 756 阅读 · 0 评论 -
lua元表概念
元表,听起来高大上,说白了,就好像一个附属表一样。。。比如有个表t, 为表t设置一个元表t2, 加入t中没有的东西,如果有元表,将会去t2去找找。。。t={}--table默认没有元表print(getmetatable(t))t="hello"--字符串默认有元表print(getmetatable(t))t={}t2={}--为t设置元表t2setmeta...原创 2019-04-20 14:06:28 · 213 阅读 · 0 评论 -
lua元表中的 __index键值
学了元表,里面的一个很重要的键值 __index , 当我们通过键去访问一个表时,如果不存在这个键,lua还会尝试搜索表的元表的__index键值,没有则返回nil1.如果元表中的__index键对应的是表, 直接搜索键名,搜索不到返回nil2.如果元表中的__index键所对应的是函数,则调用函数并传递 表和键 两个参数, 返回函数返回值t = {1,2,3,4 }print( ...原创 2019-04-19 21:59:30 · 1286 阅读 · 0 评论 -
Lua面向对象写Student类
面向对象大家都不陌生了, lua可以使用表(table) , 元表(metatable)来模拟面向对象设计 , 我们来使用Lua写一个简单的Student类-- 声明类型Student = {};-- 设置__index元方法(关键)Student.__index = Student;-- 定义构造函数function Student:Create() ...原创 2019-04-19 16:29:08 · 374 阅读 · 0 评论 -
lua中冒号与点的区别
冒号: 只是起了省略第一个参数self的作用,该self指向调用者本身,并没有其他特殊的地方。Girl = {money = 200}function Girl.goToMarket(Girl ,cost) Girl.money = Girl.money - cost print("Girl剩余", Girl.money)endGirl.goToMarket(...原创 2019-04-19 15:37:00 · 590 阅读 · 0 评论 -
lua中的table类型
lua中的table类型确实很灵活,灵活到大家发挥想象力,随意发挥--lua中的表太强大了 t={} t.a=111 t["b"] =222 t[-3] ="bbb" t.t={1,2,3,4,5} -- 定义一个函数 function t.fun(p) io.write("\n这是第一个函数! ",p) end t.fun2 = functi...原创 2019-04-18 21:58:39 · 1056 阅读 · 0 评论 -
让你真正理解 lua 泛型for
最近在看lua,看到泛型for一脸懵逼,完全不知道究竟是怎么运转的,今天拿一个常见的例子来跟大家讲个透彻!!!泛型 for 的执行过程:(1) in 后面表达式应返回:迭代函数、状态常量、控制变量; 如果表达式返回的结果个数不足三个会自动用 nil 补足,超出三个的会被忽略。(2) 向迭代函数 传入两个参数 状态常量、控制变量,迭代函数的第一个返回值 如果为nil ,则停止...原创 2019-04-18 19:26:48 · 1730 阅读 · 1 评论 -
Lua有状态迭代器
lua中的迭代器通常使用函数来实现,当我们调用一次迭代器函数的时候,返回集合中的下一个元素,到这里,我们知道,那这个迭代器函数必须保存上一次调用时的一些状态,以便下一次调用,lua中的closure正好符合要求,我们可以把上一次调用的信息保存在closure中,然后就是我们需要一个返回这个迭代器的函数,我们可以把这个函数叫着生成迭代器的工厂函数。看概念头疼,直接撸代码--迭代器共厂...原创 2019-04-18 16:14:38 · 545 阅读 · 0 评论 -
Lua的 setfenv函数
setfenv函数可以设置全局环境中有的变量或者函数,通过_G可以查看拥有的函数(比如print、setfenv等)与全局变量, 但是修改_G的指向一张空表 对系统环境是没有影响的,因为系统并不是访问_G来获取相关函数与变量!!!理论总是枯燥,需要代码来验证:print(_G)_G.a=111--_G ={} --对系统环境没有影响print(a) --正常使用print 与...原创 2019-04-23 14:56:52 · 2420 阅读 · 0 评论 -
Lua无状态迭代器
无状态的迭代器是指不保留任何状态的迭代器,因此在循环中我们可以利用无状态迭代器避免创建闭包花费额外的代价。每一次迭代,迭代函数调用 状态常量、控制变量两个参数,一个无状态的迭代器只利用这两个值可以获取下一个元素。不啰嗦概念,看代码,来理解:--求数字j到N的平方function square(N, j) if j <= N then ...原创 2019-04-18 14:28:09 · 897 阅读 · 0 评论 -
lua中#,getn, maxn获取数组的长度的陷阱
lua获取table长度的接口有很多:table.getn() ’#’操作符 table.maxn()用#和table.getn 等价,它计算的是数组元素长度(不包括hash 键值),返回从1开始连续的最大key(看具体情况)。maxn 不论key是否连续,返回最大的key在规范的数组情况下,三种方式都能正常获取值:t= { 4,5,6,7,8}print("...原创 2019-04-18 11:44:15 · 3703 阅读 · 1 评论 -
lua _G 表
今天研究一下_G这张表:-- _G是一张表,保存了lua所用的所有全局函数和全局变量for a,b in pairs(_G) do print(a,"\t",b) if type(b) == "table" then for x,y in pairs(b) do print("\t","|--",x,y) ...原创 2019-04-22 20:31:30 · 10734 阅读 · 3 评论 -
lua中 pairs 与 ipairs 区别
pairs 与 ipairs 两者的区别如下:--数组这么定义,貌似没差别t= {1,2,3,4,5}for k, v in ipairs(t) do print(v)endprint("--------------------")for k, v in pairs(t) do print(v)end效果看起来一切正常--手动...原创 2019-04-17 21:02:55 · 575 阅读 · 0 评论 -
Lua全局变量与局部变量
在lua中,局部变量(变量名前加 local)与全局变量类似于C语言中的概念:print(a) --打印变量nila=111 --全局变量(整个lua文件中都可以使用,向下的范围)do local a=0--局部变量在语句块的结束 a=1 --局部变量优先 print(a)--局部变量 print(b) --打印变量nil b=...原创 2019-04-22 16:55:52 · 5792 阅读 · 0 评论 -
lua的注释写法
lua中的注释不是 // , /**/ ,而是标新立异的 ,--print("单行注释")---print("单行注释")--[[print("整段注释")print("整段注释")print("整段注释")]]--[=[print("整段注释,=号个数随意")print("整段注释,=号个数随意")print("整段注释,=号个数随意")--]=]...原创 2019-04-22 16:06:18 · 26891 阅读 · 4 评论 -
Lua面向对象之继承( Student类继承自Person类)
继承是面向对象中一个很重要的特性,要想在lua中实现该特性也相对比较简单,配合元表和__index元方法,让派生类与基类形成一条链,前面我们学习了Student类,那么我们让Student类继承自Person类,看代码:-----------------基类---------------------Person = {};-- 设置__index键为一张表,这个表是自己Pers...原创 2019-04-22 14:09:12 · 1798 阅读 · 0 评论 -
lua 元表中的 __newindex 键
先看__newindex的用法介绍:①如果table的元表没有__newindex,会在一开始的表中创建对应的字段。②如果table的元表的__newindex是一个函数,在给table不存在的键赋值时,会调用此函数。③如果table的元表的__newindex是一个表,在给table不存在的键赋值时,会给__newindex对应表中的相应字段赋值。(即使key事先并不存在)...原创 2019-04-20 16:38:02 · 989 阅读 · 0 评论