lua基本语法

lua

  1. Chunk是一系列语句,lua执行的一个文件或者交互模式下的每一行都是一个chunk
    lua -l a -l b,-l调用require,-i选项要求lua运行指定的chunk后进入交互模式
  2. 比较类型
  3. false nil为假,其他为真包括0
  4. 逻辑运算符and or not,and比or优先级高,not的结果为false或true
    a and b – 如果a为false则返回a,否则返回b
    a or b – 如果a为true则返回a,否则返回b
    x = x or v – 若x为nil或false则赋值为v
    a ? b : c <=> (a and b) or c
  5. 字符串链接..,如果操作数为数字,lua将数字转换为字符串
  6. 表的第一个元素索引为1,依次累加,若某个元素存在索引则跳过
  7. 同时赋值,先计算右值在付给左值,变量个数不匹配,右值少了的为nil,多了的忽略
  8. do … end <=> {}, local
  9. if .. then .. end; if .. then .. else .. end; if .. then .. elseif .. then .. else ..end;
    while .. do .. end;
    repeat .. until ..;
    for … do .. end;
    return and break
  10. function
    参数中对于的实参忽略,不够的形参默认为nil
    可变参数,…,将…中的参数放置arg表,arg.n表示…中参数个数,unpack(arg)返回arg表所有的可变参数
    多返回值
       当函数被调用作为表达式的最后一个参数或者仅有一个参数时,函数尽可能多的返回多个值,并根据接受返回值的个数多nil少忽略
    其他情况下,一个return语句只会返回第一个值,使用圆括号将返回值括起来,此时即使是上面的情况,也将导致返回第一个值
    
  11. function
    第一类值:函数实际上作为一种数据类型,其值可以当做普通变量赋值传递等,第一类值函数应用在lua实现面向对象和包机制的关键
    词法定界:当一个函数内部嵌套另一个函数定义时,内部的函数体可以访问外部函数的局部变量
    闭包:闭包是一个内部函数,它可以访问一或者多外的局变量。每次闭包成功调用后这些外部局变量都保存他们的值(状态)。当然如果要创建一个闭包必须要创建其外部局部变量,所以一个典型的闭包的结构包含两个函数:一个是闭包自己,另一个是创建闭包的函数(工厂)
  12. 局部递归函数,需要在定义函数时事先声明为local function,forward’declarations
  13. 迭代器和泛型for
    无状态的迭代器只不保留任何状态的迭代器,可以利用无状态的迭代器避免创建闭包话费的额外代价,如ipair,只需要常量状态和控制变量就可以遍历整个表
    多状态的迭代器,尽量使用闭包,另外还可以将所有的状态信息封装到table内,在将table作为迭代器的状态常量,但代价比闭包大
  14. 编译:解释性语言的特征不在于是否被编译,而在于编译器是语言运行的一部分
    dofile/loadfile dostring/loadstring不会有边界效应,lua把每一个chank都当做一个匿名函数处理
    lua函数的定义是发生在运行时的赋值而不是发生在编译时
    require会搜索目录加载文件,并判断和避免加载同一份文件
    错误:对于程序逻辑上能够避免的异常,用抛出错误的方式处理之,否则返货错误代码assert error
    异常:pcall debug.traceback
  15. 协同程序
  16. 数据结构
  17. MetaTable & Metamethods
    Table和Userdata有各自的元表,其他类型分享同一张元表,但默认创建的Table是没有元表的
    Metamethods:add/mul/sub/div/unm/mod/pow/concat
    __le/__lt/__eq
    __tostring
     __metatable元域,私有域
    查询:当访问表的一个未定义的索引时,若它的元表设置了__index元方法,则会调用该方法,__index也可以直接指向表,但使元方法更高效更实用; getrow(t,k)
    修改:当更新的索引不存在于表中时,若它的元表设置了__newindex,则会将该值更新到__index,若仅有一个则...;setrow(t,k,v)
    
    带默认值的表…,用表做键… weak table
    监控表:创建代理,代理是一张空表,提供index和newindex,通过这两个元方法,将访问重定向到真实的表
    只读表:监控到企图修改的操作则报出异常
  18. _G
  19. 所有的标准库都是modules,通过require来加载,require后返回一个表,通过该表来访问模块中导出的所有的函数、常量等
  20. 对象/类,表/原型
  21. Weak表是一种来告诉lua一个引用不应该放置对象被回收的机制
    weak有__mode域来指定,\”k\” \”v\” \”kv\”

简单地说,脚本语言是一种高级编程语言,在运行时由另一个程序解释
脚本的另一个优点是它们通常可以在运行时重新加载
那些逻辑相对静止并且对时间效率要求较高的则使用编译型语言来做,那些容易变化的对时间效率宽松的部分用脚本来做

0%