• 轻量级嵌入式脚本语言
  • 动态类型语言

语法

数据类型

  • nil boolean number string userdata function thread table
    使用type()返回类型

  • Boolean

    • boolean和nil都被看做false
    • 0和空串被看做true
  • Number

    • 全部用浮点表示
    • 16进制表示也可以用2进制指数方式
      0x2.2p2 等于(2+2/16)*2^2
  • String

    • String不能被修改,替换其中字符后会创建一个新字符串
    • Lua自动处理字串内存分配问题,直接操作超长字串也OK
    • 使用#string来查看字串长度
    • 使用[==[....]==]来包含字面文字(Literal Text)
      其中=可以是0个或任意多个
    • 使用..来连接字串
    • string转number:tonumber()
      number转string:tostring()
  • Table

    • Table是对象
    • 变量指向Table的引用
    • Table存储键-值对
      创建Table: a={}
      赋值:a["x"]=10
    • a.xa["x"]是相同的,注意第二项的x是字串值,不是变量名
    • Lua的array从1开始,不是从0开始
    • 对于没有洞(中间没有nil项)的Table(可以称之为Sequence),用#a来获取长度(或者说最后一项的index)
  • Function

    • Function可以被当做变量,参数和返回值
    • Lua可以调用C函数
  • Userdata和Thread
    N/A

表达式

  • 算术表达式
    +, -, *, /, ^, %, -(负号)
    全部操作都是针对浮点数
    支持浮点的求模, a%b==a-math.floor(a/b)*b

  • 关系表达式
    <, >, <=, >=, ==, ~=
    不同类型不相等
    table和userdata类型,引用同一个对象才相等
    大小仅用于number和string类型

  • 逻辑表达式
    and, or, not
    and和or使用短路方式

    x=x or v 
    

    a and b or c –相当于C语言的a?b:c

  • 连接表达式
    ..
    支持数字的连接,但要在前后加空格

  • 长度表达式
    #
    仅对序列(sequence)有效

  • 优先级

优先级 操作符
0 ^
1 not # -(neg)
2 * / %
3 + -
4 ..
5 < > <= >= ~= ==
6 and
7 or

只有^和..是右结合性

  • table构造器
    a={"xxx","yyy","zzz"}按数字index初始化
    a={x=10,y=20}按键值对初始化
    a={["x"]=10,[1]="xxx"} 初始化的标准形式

语句

  • 支持用逗号分隔的多重赋值:a,b=10, 2*x
    可以用这个形式交换数据:a,b=b,a
    虽然没有单独赋值快,但可以接受函数返回多个返回值
  • 局部变量:local i =1
  • 控制结构

    if a<0 then a=0 end
    if a<b then a=b else b=a end
    if .. then .. elseif .. else .. end
    

    whiledoend
    repeatuntil

    for var= start, end, [step] do … [break] … end
    for k,v in pairs(t) doend

    return只能放在每个代码块的最后,想插入return可以写成do return end
    goto可以跳到标签,但不可以跳进块,也不可从函数跳出。标签的写法:🏷️:

函数

  • 仅有一个参数,且参数是字面量字符串或者表构造器的时候,可以省略():print "hello world" f{x=10,y=20}

注释

--这是一个单行注释  

–[[
这是一个多行注释
–]]

—[[
加一个小杠可以取消多行注释,很方便
–]]

进阶

待补充

获取和安装

官网下载安装包->make macosx install

lua运行环境

  • 脚本运行

    #!/usr/local/bin/lua
    
  • lua解释器

    lua -i -e "嵌入式lua语句" -l库 脚本名 脚本参数
    

    -e后面跟嵌入式lua语句
    -l后面跟库
    -i是运行完脚本后打开交互式环境

    arg[-3]=”lua”, arg[0]=脚本名,arg[1]=arg1…

Q&A

  • Q:Lua的基本特征是什么?
    A:Lua的基本特征是…