Lua的学习笔记

  Lua 是一种轻量级的脚本语言,不需要编译,可以直接运行

       与c# 有些不同   首先Lua   不需要分号结尾(写也没问题)

                         注释: 单行注释 --    多行注释 以--[[ .......   ]]

                         定义:1  定义变量不需要写变量类型    变量名= 值      (变量名(标识符)以一个字母或下划线开发,后加0个                                                                                                                                             或多个字符或下划线或数字)

                                      2  Lua是区分大小写的        注意: 下划线加大写字母开头,这种格式一般情况lua自己保留尽量避免使用

                          数据类型

                                       1.  空数据用nil 表示, 相当于c#的null  ;  lua中没有整型和浮点型之分,就是number 数字类型                    

                                                       布尔类型 boolean   ;       字符串类型 没有字符字节之分 可以使用 双引号、单引号或[[..]] 表示

                                        2.  字符串的连接  用 ..  两个点来连接   

                                        3. 字符串的算术运算,数字类型的字符串 lua会自动转换成number类型进行计算

                                         4.  获取字符串长度    :   # 变量名

                           流程控制语句

                                         注: lua中除了false 和 nil 是假, 其余任意的类型数据都是 真

                                        if   条件  then                                     if   条件   then

                                              print()                                                    print()

                                        else                                                    elseif   条件   then 

                                               print()                                                    print()

                                          end                                                    end

                                       注意: 条件后跟then  最后 跟end  ,   c#中 else  if   在lua中 是 elseif               

                           运算符 

                                        注: lua 中可以对小数 求余 。    lua中没有++  +=   -=  运算符  只能是用  a = a+1

                                        关系运算符  :   == 等于    <  >   <=   >=     小于,大于,小于等于,大于等于

                                                                     ~= 不等于

                                        逻辑运算符:   与 and            或  or               非  not

                          循环语句 

                                      while 循环            while[循环条件]do  ... [循环体] ... end        

                                                                                     a = 0
                                                                                     while a < 10 do
                                                                                           print (a)
                                                                                           a = a + 1
                                                                                     end          

                                      repeat 循环   repeat ... [循环体]  ... until [跳出循环条件]

                                                         相当于 do{} while()循环,但是又有一点不同  Lua语句条件判断是满足就跳出循环

                                                                                                                                        (c#中 do while  是直到不满足条件时 跳出)

                                     for 循环        for  [number变量初始化]  ,[变量到多少跳出],[每次加的数值] do

                                                                .... 循环体 ....

                                                            end

                                                        -- 如果不填入每次加的数值,默认每次变量加1

                                      注意: lua中可以使用break 跳出循环,但是没有continue语法

                       table表       lua中table表 是一个“关联数组”  , 数组的索引可以是数字可以是字符串     类似字典

                                            创建:  t = {k = "bu" , "a" ,  [2]  = 1 ,  "nihao" }    

                                                           “a” : 没有指定索引,会按默认的索引走, [2] = 1 表示数值1指定数字类型2的索引

                                                            k = "bu" : 数值“bu” 指定了一个字符串k的索引

                                                        注意: 默认索引的优先级要高于指定的索引的优先级,所以会搜索不到[2] = 1 这个值

                                            访问:

                                                      t ["索引"]   或者 t . 索引名     / /  数字索引不用加双引号

                                             修改: 

                                                          t [数字] = 值  /   t ["索引"] = 值   /   t . 索引名= 值

                                             删除:

                                                               t [索引] = nil

                                   Lua数组(本质上也是table表)  t = {"a" , "n","e"}

                                                                      遍历:    for  i=1  , #t  do 

                                                                                             print(t[i])

                                                                                       end

                                                                 默认 索引从1开始 ,不是从0开始的。  不过可以有0号索引,甚至是符号索引

                                                                      注意: # 获取的是从1开始的 连续的长度

                 

                    迭代器 

                                   for 变量1  , 变量2     in pairs (table的变量名) do 

                                     ... [循环体]...

                                   end

                                 遍历该变量 table表中 所有的 键 和值

                   函数(方法)

                              1.    两种方式:  function方法名(参数)方法体 end

                                                       方法名 = function (参数) 方法体 end

                                   注意:   调用方法时,看上方有无定义方法 。 带有参数的方法里面的参数可以传任意类型

                               2.  可变参数的方法   functoin 方法名(...) --... 表示是可变参数    / 固定写法,可以往里面任意的参数

                                          所有传递进来的参数都存放在一个arg表里 , 可以通过遍历来获取传递进来的参数

                              3.    Lua里面没有 ref 和out 关键字 : 因此 若是 

                                                       function func1 ()
                                                                  return 返回值1 , 返回值2 , 返回值3,....
                                                         end    

                                      需要多个变量接受         变量1,变量2,变量3, ... = func1()

                                                       接受变量可以多于返回值,多出来的变量按nil处理;

                                                   ;接受变量也可以少于返回值,多出来的返回值不处理

                     

                    小知识点: 1.在lua中没有全局和局部变量之分 

                                          局部变量 需要加关键字 local修饰的变量      默认情况下是全局性的

                                         2.  lua 支持转义字符   

                                        3.  require 的加载路径   lua提供给了一个package. path 保存了require能加载的所有的路径,每个路径以分                                                                                   号分隔开

                                          

                                                                             .\ 表示的是当前文件所在的目录      .. \ 表示的是当前文件所在的目录的上级目录

                                                                 注意因为支持转义字符,所以添加路径是 不能使用单斜杠,使用双斜杠 

                                                                          最后以  \\?.lua 结尾  。 且路径开头要加 ; 分号哦

                                                     使用了 .\                 package.path = package.path .. ";.\\Model\\?.lua"

                                                    不使用的话,需要完整的目录路径

                                          4. Lua元表 即 相当于重载运算符,setmetatable(t1,t2) 设置t2 为 t1 的元表

                                                                                                           getmetatable (t1)  获取t1 的元表

                                                                   算术类元方法: __add(+)   __suh(-)  __mul(*)  __div(/)  __mod(%)  __unm(相反数)

                                                                   关系类元方法: __eq(==)  __lt(<)   __le(<=)

                                                                    访问的元方法: __index(查询)  __newindex(修改)

                                                        都是 双下滑线哦 

                                                       这些元方法的返回值    代表的是 两个table表 执行了该方法(即小括号里的运算符)后的结果

                         

                                   

                                                               

                                                         

                                                        

                                          

猜你喜欢

转载自blog.csdn.net/j_sbytc3/article/details/81486459