Lua的语法

Lua语法总结

+++++++++++++一、Lua的变量类型:1.简单变量 nil(空);number(数字(整数的小数));boolean(布尔);string(字符串)

                                2.复杂变量 function:函数、table:表、userdata:数据结构、thread:协同程序

二、Lua中的type函数返回一个字符串type(a),返回a的类型,Lua中不用指明变量类型,也可以直接使用未赋值的变量(默认为nil)

三、Lua的字符串操作 1.长度获取#

                                    2.多行打印   (1)转义字符 print("123\n123")

                                                         (2)[[]] s = [[我是

                                                                         唐

                                                                         老师

                                                                          ]]

                                                                          print(s)

                                    3.字符串的拼接  (1) ..

                                                               (2) string.format

                                    4.其他类型转字符串   tostring

                                    5.字符串提供的其他api   1.小写转大写string.upper()      

                                                                            2.大写转小写string.lower()

                                                                            3.翻转字符串string.reverse()

                                                                            4.字符串索引查找string.find(srt,"Cde")     

                                                                            5.截取字符串string.sub(str,3,4)      

                                                                            6.字符串重复string.rep(str,2)

                                                                            7.字符串修改string.gsub(str,"xx","yy")

                                                                            8.字符串转ASCII string.byte()          

                                                                            9.ASCII转字符串string.char()

四、Lua的运算符  1.算术运算符 + -  %  ^   /  =  等

                              2.逻辑运算符: and or not

                              3.不支持位运算和三目运算,没有自增自减和符合运算符

五、Lua的条件分支语句  if(条件) then ……end

                                1.单分支 if a > 5       then     print("123")   end

                                2.双分支 if a < 5 then  print("123")      else        print("321")    end

                                3.多分支if 条件 then.....elseif 条件 then....elseif 条件 then....else.....end

                                4.Lua中也没有Switch 也需要自己实现

六、Lua中的循环   1.While while 条件 do ..... end

                               2.repeat ..... until 条件 (注意:条件是结束条件) repeat print(num)num = num + 1    until num > 5   --满足条件跳出 结束条件

                               3.for循环  for 变量名=起始值,结束值,增值  do……end    for i =1,5,2 do --如果要自定义增量 直接逗号后面写  不写默认为1 也                                      可以为-1这种

七、Lua的函数  function   1.两种声明方式  --function 函数名() ……end     和a = function()……end

                                          2.有参函数的参数列表个数传多了或者少了都不会报错 多了会丢弃,少了会补空

                                          3.函数的返回值:多返回值时,外部用多个变量来接取,接多接少不影响,少丢弃,多报空

                                               例:function F4(a)  return a, "123", true   end

                                                       temp, temp2, temp3, temp4 = F4("1")

                                            4.函数类型 就是 function

                                            5.函数名相同 参数类型不同 或者参数个数不同 lua中 函数不支持重载  默认调用最后一个声明的函数

                                            6.变长参数   变长参数使用 用一个表存起来 再用    function F7( ... )   arg = {...}  for i=1,#arg do  print(arg[i]) end end

                                                                                                                             F7(1,"123",true,4,5,6)

                                            7.闭包:改变变量的声明周期  !!

八、复杂数据类型:表是一切复杂数据的基础:数组 二维数组 字典 类等等  lua中 索引从1开始  #是通用的获取长度的关键字 在打印长度的时候 

       空被忽略     如果表中(数组中)某一位变成nil 会影响#获取的长度

九、迭代器遍历:  IPairs和Pairs

                             --ipairs     ipairs遍历 还是 从1开始往后遍历的 小于等于0的值得不到  只能找到连续索引的 键 如果中间断序了 它也无法遍历出                                               后面的内容

                             --Pairs      它能够把所有的键都找到 通过键可以得到值

十、复杂数据类型:表 

                                1.字典  --字典是由键值对构成  访问某个变量的方法:   print(a["name"])  和  print(a.name)

                                                                                  修改a["name"] = "TLS";  如果没有name这个键,就会直接新增

                                                                                   删除  a["sex"] = nil

                                                                                   模拟字典遍历要用pairs

                                 2.类: parent={}

                                         Parent.__index=Parent

                                           fuction Parent:New()

                                                       local self={}

                                                       setmetatable(self,{__index=Parent})

                                                        return self

                                            end

                                            继承:Son=Parent.New()

                                            多态:相同方法 不同执行逻辑 就是多态

                                            base 指的是 GameObject 表(类)

                                            --这种方式调用 相当于是把基类表 作为第一个参数传入了方法中

                                            --避免把基类表 传入到方法中 这样相当于就是公用一张表的属性了

                                            --我们如果要执行父类逻辑 我们不要直接使用冒号调用

                                            --要通过.调用 然后自己传入第一个参数 

    self.base.Move(self)

                                    3.表中的成长函数和学习函数

                                        学习函数 能够在函数内部调用自己属性或者方法的方法  把自己作为一个参数传进来在内部访问

                                    4.Lua中用冒号调用函数 会把调用者作为第一个参数传递进去

                                    5.Lua的一些表的方法  remove      传表进去会移除最后一个索引的内容

                                                                                           传两个参数 第一个参数 是要移除内容的表 第二个参数 是要移除内容的索引


                                                                        sort:传入要排序的表 默认降序排列  传入两个参数 第一个是用于排序的表  第二个是 排序规则函数

                                                                        concat:连接函数 用于拼接表中元素 返回值 是一个字符串


                                       6.其他脚本的执行  package.loaded["脚本名"]  返回值是boolean 意思是 该脚本是否被执行

                                                                      卸载已经执行过的脚本  package.loaded["Test"] = nil

                                                                     _G表是一个总表(table) 他将我们申明的所有全局的变量都存储在其中

                                       7.特殊用法: --多变量赋值 如果后面的值不够 会自动补空    a,b,c = 1,2 

                                                           --多变量赋值 如果后面的值多了 会自动省略    a,b,c = 1,2,3,4,5,6

                                                           --多返回值时 你用几个变量接 就有几个值  如果少了 就少接几个 如果多了 就自动补空

                                                           --逻辑与 逻辑或

                                                           -- and or 他们不仅可以连接 boolean 任何东西都可以用来连接

                                                           -- 在lua中 只有 nil 和 false 才认为是假

                                                           -- "短路"——对于and来说  有假则假  对于or来说 有真则真 所以 他们只需要判断 第一个 是否满足 就会停止                                                                 计算了

                                        8.协程:协程的本质还是一个线程

                                                      --常用方式  1.coroutine.create()     co = coroutine.create(fun)   print(co)  启动 coroutine.resume(co)  返回thread

                                                                         2.co2 = coroutine.wrap(fun)       返回一个函数                       启动co2()

                                                       协程挂起:coroutine.yield()

                                                        coroutine.status(协程对象或者协程函数)  dead 结束   suspended 暂停  running 进行中

                                                        coroutine.running()  返回一个线程编号

                                          9.元表 :任何表变量都可以作为另一个表变量的元表   任何表变量都可以有自己的元表

                                                       设置元表 setmetatable(son, father)       

                                                        得到元表 getmetatable(son)

                                                        __tostring  当子表要被当做字符串使用时 会默认调用这个元表中的tostring方法

                                                        __call 当子表被当做一个函数来使用时 会默认调用这个__call中的内容且默认第一个参数是自己

                                                        __index 当子表中 找不到某一个属性时会到元表中 __index指定的表去找属性

                                                        --newIndex 当赋值时,如果赋值一个不存在的索引 那么会把这个值赋值到newindex所指的表中 不会修改自己

                                         10 .   os.time()   os.time({year = 2014, month = 8, day = 14}

                                                   math的用法 :  print(math.abs(-11))   绝对值

                                                                          math.deg(math.pi)   弧度转角度

                                                                          math.cos(math.pi)   三角函数传弧度

                                                                          math.floor(2.6)      math.ceil(5.2)      向下向上取整

                                                                          math.max(1,2)      math.min(4,5)       最大最小值

                                                                          math.modf(1.2)    小数分离 分成整数部分和小数部分

                                                                          随机数先设置随机数种子    math.randomseed(os.time())  math.random(100)  math.random(100)

                                        11.Lua的垃圾回收  collectgarbage("count")

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 热更新 如热更新果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新打包,然后让玩家重新...
    周joe阅读 3,057评论 0 4
  • 命名规范 1.脚本的后缀名是 .lua 2.单行注释 -- 3.多行注释--[[ ]]-- 4.print 是lu...
    段然丶阅读 298评论 0 0
  • 1.Lua的特性 (1)可扩展性:Lua很容易和其他语言进行交互,很容易通过库扩展功能 (2)小巧,精简:Lua的...
    想变的很强的日向彻阅读 651评论 0 0
  • 一. 安装Lua环境 下载 luahttp://joedf.ahkscript.org/LuaBuilds/[ht...
    熊爸天下_56c7阅读 629评论 0 1
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 9,078评论 28 54

友情链接更多精彩内容