世界速看:lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
一、lua变量【全局变量和局部变量和表中的域】Lua变量有三种类型:全局变量和局部变量和表中的域。▪全局变
1、全局变量Lua 变量有三种类型:全局变量和局部变量和表中的域。
(资料图片)
▪ 全局变量:默认情况下,Lua中所有的变量都是全局变量。
▪ 局部变量:使用
local
显式声明在函数内的变量,以及函数的参数,都是局部变量。在函数外即使用local
去声明,它的作用域也是当前的整个文件,这相当于一个全局变量。▪ 表中的域:变量的默认值均为
nil
。☺ Lua语言不区分未初始化变量和被赋值为
nil
的变量,因此全局变量无须声明即可使用。
全局变量,不需要声明,只需要将一个值赋予一个全局变量即可创建了
。
b=10 -- 这个b就是一个全局变量了print(b)
通常没必要删除一个全局变量,如果一个变量生存周期较为短,使用局部变量即可。不过,如果真的想删除全局变量的话,只需将它赋值为nil。b=nil -- 这个全局变量b就被删除了print(b)
2、局部变量-使用local 声明Lua 中的变量全是全局变量,哪怕是语句块或是函数里,除非用 local 显式声明为局部变量。
局部变量的作用域为从声明位置开始到所在语句块结束。
3、lua表中的域■ 建议:在Lua中,应尽可能使用局部变量,好处:
避免命名冲突访问局部变量的速度比全局变量更快
a = {}a[10] = 1for i=1,15,1 doprint(a[i])end
结果:二、lua数据类型、if判断条件1、Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。
数据类型 | 描述 |
---|---|
nil | 空值,只有值nil属于该类,表示一个无效值 (在条件表达式中相当于false)。 |
boolean | 布尔类型 |
number | 数值类型,相当于C语言的double |
string | 字符串类型,由一对双引号或单引号来表示 |
function | 函数类型,由 C 或 Lua 编写的函数 |
table | Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的字面量是用{} 表示。{},表示创建一个空表。 |
thread | 线程类型,表示执行的独立线路,用于执行协同程序 |
userdata | 表示任意存储在变量中的C数据结构 |
table的字面量:{}
,创建的空表,内部的域默认值是nil。表用大括号{}来构造,可以是多维的 {{}}。1、lua中的表,其实是一个"关联数组",关联数组是一种具有特殊索引的数组,数组的索引可以是数组、字符串、表等[除了nil]。表中的元素是键值对形式。key 也就是数组的索引。表的key是唯一的。表是可以自定义键名。2、table 是没有固定大小的,可以添加任意数量的元素到数组中。3、table 是lua中最主要的数据结构机制,也是唯一的数据结构。用它可以实现数组,哈希表、集合、字典等等。还可以通过table 表示对象、包、模块。
4、表中元素的删除,有两种方式:直接设置为nil或调用remove方法删除两种删除方式的区别:直接把元素赋值为nil,会留下空位,不影响其他元素。而用remove函数去删除,会把后面的元素往前移,补位。5、表中元素有多少个,可以使用#获取6、表中的索引是从1开始的
其实lua 中的table 概念,相当于java中的对象的概念。万物皆是对象。
tb={"干饭", "吃饭", "恰饭"}
实际上,tb如下:-- tb的情况如下:-- 地址table(c917ad2){ [1] = "干饭", [2] = "吃饭", [3] = "恰饭",}
7、表有自定义键的时候:-- 表中只写了值value作为元素tb={"干饭", "吃饭", "恰饭", s="溜达"}
实际上,表是有默认分配键key的,默认分配的键是从数字1开始的,tb表中的分配如下:-- tb的情况如下:-- 地址table(c917ad3){ [1] = "干饭", [2] = "吃饭", [3] = "恰饭", ["s"] = "溜达",--细节:s会被带上引号}
细节:要通过自定义的s键获取到值,s是要加上引号的。
对于自定义的键有一个语法糖,中括号可以使用点代替
表中默认分配的键和自定义键的执行顺序是:默认的先执行,然后再是自定义的键
-- 表中只写了值value作为元素tb={"干饭",a="溜达",b="哈哈哈", _="饿了么","吃饭", "恰饭"}
实际上,tb表中的分配如下:程序分配键的时候,会先跳过自定义键,再接着分配。-- tb的情况如下:-- 地址table(c917ad3){ [1] = "干饭", [2] = "吃饭", [3] = "恰饭", ["a"] = "溜达", ["b"] = "哈哈哈", ["_"] = "饿了么",}
结果:8、table 提供的增删元素的方法 table.insert 和 table.removetable.insert(表名,要增加的键位,要增加的值) 直接再最后的位置增加元素:table.insert(表名,要增加的值)
table.remove(表名,要删除的键位)
四、lua 函数(形参-实参数数量不匹配、多重返回值、不定长参数、方法的冒号和点-self隐式参数)0、lua 程序是严格从上到下的顺序执行代码的, 函数的声明必须在写函数调用前面。1、函数定义的方式在lua中,函数是作为第一类型,
函数是可以存在在变量中,也可以通过参数传递给其他函数,还可以作为其他函数的返回值,还可以作为table表中的键
-- 方式1:function 函数名(参数列表)函数内容end-- 方式2:函数名=function(参数列表)函数内容end
2、lua 函数① 函数是可以存在在变量中【匿名函数
】a = function(x, y)return x * yendb = aprint(b(2,3))
结果:
6
▪ 在table中也可以存在function函数tab = {test=function()print("Hello World!")end}tab.test()
结果:Hello World!
3、形参-实参数数量不匹配传入的实参数量 > 定义的形参数量:多传入的参数,直接被忽略了传入的实参数量 < 定义的形参数量:缺少的参数,使用nil替补4、多重返回值举例1:举例2:小细节:多个具有多重返回值的函数连续调用[使用,间隔],只有最后一个函数被展开,即最后一个函数才有资格返回多个值,其他函数都默认返回第一个值5、不定长参数和java 一样,不定长参数使用...表示,并且作为函数的最后一个参数。用 select函数来访问变长参数了select("#", …) 返回可变参数的长度。select(n, …) 用于返回从起点 n开始到结束位置的所有参数列表。6、方法的冒号和点-self隐式参数▷ Lua 定义或调用方法时的语法糖-冒号,表示参数self■ 举例1:这个语法糖是用冒号,表示self,相当于java中的this
--定义Account = { balance = 0 }--withdraw 方法有两个参数,一个self【相当于java中的this】是指向当前table的Account function Account.withdraw(self, v) self.balance = self.balance - vend--等价写法:function Account:withdraw(v) --通过冒号,表示定义了第一个参数是self self.balance = self.balance - vend--调用Account.withdraw(self, 100)--等价写法Account:withdraw(100)
■ 举例2:-- 在table的键值对的value---是function的时候,方法的参数是self,并且还将self 参数传递给function方法体的另外一个方法-- {} 在lua中表示tabletbWnd.tbOnClick = { btnOk = function(self) self:onClickOK() -- 相当于onClickOK(self) end,}
7、函数嵌套调用,并且作为参数的那个函数,它是需要有参数传入① 通过将参数存储到table中,table又绑定上的函数,该函数就可以通过self.key 拿到参数② 然后外层的函数(func,table)local tbTable = {}tbTable.key1 = 1function tbTable:func1()--这样写,隐式参数是self print(self.key1)end-- 函数嵌套调用function func2(func,tbSelf) func(tbself)end-- 执行func(tbTable.func1)
☺ 五、lua 函数常见写法1、直接构建function func(...) print(...)end-- 调用函数func(123)
2、表构建,key存储函数(1)local tbTable = {}function tbTable.func1(...) print(...)endfunction tbTable.func2(...) print(...)end-- 调用函数tbTable.func1(123)tbTable.func1(4,5,6)
3、表构建,key存储函数(2)local tbTable = {}tbTable.func1 = function(...) print(...)endtbTable.func2 = function(...) print(...)end-- 调用函数tbTable.func1(123)tbTable.func1(4,5,6)
4、表构建,key存储函数(3)local tbTable = { func1 = function(...) print(...)end, func2 = function(...) print(...)end}-- 调用函数tbTable.func1(123)tbTable.func1(4,5,6)
六、函数嵌套|闭包1、local 特点:局部变量:使用local
显式声明在函数内的变量,以及函数的参数,都是局部变量。
在函数外即使用local去声明,它的作用域也是当前的整个文件,这相当于一个全局变量。
2、函数嵌套|闭包(1) 特点:函数的调用是用() 表示,有多少层,函数真正调用就需要多少个()(2) 举例子:举例子1:local f = function(n)return function(x)return x+nendendprint(f(1)(2)) -- 函数嵌套,每一层都相当于()a = f(1)print(a(10))
结果:
311
举例子2:local 在函数外相当于java的全局变量【独立的作用域强调的就是这个在函数外面的local 变量】local p = 1local f = function()local v = 0 -- local 在[下面的]函数外面相当于java的全局变量return function()v = v + pprint(v)endenda,b = f(), f()a(); b();p = 2a(); b();
结果:
1
1
3
3
local 在函数外相当于java的全局变量【独立的作用域】
class A{ private int v; -- 全局变量 public void add(){}}
举例子3:local f = function()return { add = function(a,b)return a + b end, sub = function(a,b)return a - b end, }endv = f()print(v.add(1,2))print(v.sub(2,1))
结果:
31
如果本文对你有帮助的话记得给一乐点个赞哦,感谢!
关键词:
一、lua变量【全局变量和局部变量和表中的域】Lua变量有三种类型:全局变量和局部变量和表中的域。▪全局变
2004年TYPE-MOON发售的AVG文字冒险类游戏FATE STAYNIGHT,18X游戏,讲述了七名魔术师和七名
CINNOResearch产业资讯,LG显示着手开发苹果IT产品用新的蚀刻技术。据推测,其目标是在进行玻璃基板下板蚀
哈利波特魔法觉醒整蛊捉迷藏第一天伙伴在哪?活动期间,巫师每天可前往霍格莫德村寻找四位伙伴,完成对话后
1、《知识点:机械振动》是南宫中学提供的微课课程,主讲教师为王建凯。2、。
中国青年报社有关负责人,宁波东钱湖文化旅游发展集团董事长、党委书记杨郁,宁波东钱湖文化旅游发展集团党
4月18日,一则演员曾志伟的近况视频引起了网友关注,只见他现身某富婆美女的私人聚会,模样潇洒神气。作为
史上最高小米13Ultra屏幕亮度2600尼特:国屏首次站上世界之巅
随着投资者对于基金的了解加深,越来越多的人开始关注指数基金这一投资工具。指数基金是一种进行被动管理的
作为上海传统早餐“四大金刚”之一,豆浆一直是老上海人的心头好,你更偏爱甜浆还是咸浆?今天,就教大家来
今日,沪深两市收盘共26股涨停,剔除7只ST股,共计19股涨停。另外,9股封板未遂,整体封板率为65%。涨停战
民主与法制网讯(记者刘永强□雷洪涛通讯员孟京日)近日,吉林省延边朝鲜族自治州延吉市法学会在延吉市松涛
“来了之后发现,比我们想象中要好得多。”电话另一头,上海市敬业中学副校长吕宁欣喜地告诉记者,连同自己
《命运2》泄露官方封禁著名主播嫌疑人:不是我介绍了 在《命运2》预计将于5月下旬推出的第21季之前,大
焕然一新!安丘老旧小区改造进行中,家属院,大汶河,老旧小区
1、《英语酷酷乐》是2010年广东教育出版社出版的图书,作者是何舒曼、周加林。本文关于英语酷酷乐的简介就
香港联交所最新资料显示,4月11日,小摩增持凯莱英(06821)5 91万股,每股作价103 3343港元,总金额约610 71万港元。
随着ChatGPT、大数据、云计算、人工智能、元宇宙等新技术的快速发展,传统媒体与新媒体不断融合,这对新媒
外贸大盘稳中向好。一季度我国货物贸易进出口总值9 89万亿元,同比增长4 8%。其中,出口5 65万亿元,同
空客的“1+1>2”:无人机+自动空中加油,无人机,加油机,运输机,空中加油,空客公司,空中客车
今天是“国际古迹遗址日”古迹遗址是历史的见证更是文化的传承我国是四大文明古国之一中华文明有着悠久的历
4月13日下午,扬州市少儿图书馆姜刘鑫老师走进四季园小学,给四年级的孩子们带来了一场主题为《“好奇艺术
今天(4月18日)上午,浙江杭州市拱墅区人民法院一审公开开庭审理被告人吴秀芳过失致人死亡一案。杭州市拱墅
交易商品牌 产地交货地最新报价橡胶促进剂 DPG含量99%,优等品,25公斤 袋济南金锦泉经贸有限公司山东山
来源|伯虎财经(bohuFN) 作者|番茄(搬砖版) 4月13日,美团企业版举办首次发布会。这也意味着,美团要
Copyright 2015-2023 港澳酒业网 版权所有 备案号:京ICP备2023022245号-31 联系邮箱:435 226 40 @qq.com