Lua 基本语法小结

本文介绍了Lua语言的基本特性,包括轻量级、扩展性、跨平台等,并概述了Lua的语法要点,如注释、标识符、数据类型、变量、函数以及运算符。此外,还详细讨论了table的用法,作为数组和映射的数据结构,并举例展示了如何遍历table。文章最后提到了Lua的协同程序和自动内存管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Lua特性:
    a.轻量级(小巧脚本语言、方便嵌入其他程序)
    b.扩展性(可通过外部库扩展)
    c.跨平台
    d.支持面向过程编程、函数式编程
    e.自动内存管理(只提供一种通用类型表-table)
    f.语言内置模式匹配(closure、函数也是一种值、多线程支持-协同进程,并非系统所支持的线程)
    g.通过closure和table可以支持面向对象编程

2.Lua基本语法(要点):
单行注释:
    --
多行注释:
    --[[

    --]]
标识符:
    最好不使用下划线加大写字母的标识符
21个关键词:
    and break do else elseif end false for function if in local nil not or repeat return then true until while
    注:一般约定以下划线加大写字符串的名字(如_VERSION)保留为Lua内部局部变量
全局变量:
    a.默认情况下,变量总是全局的
    b.全局变量不需要声明,且未初始化不会出错,但结果是nil
    c.要删除一个全局变量,可将nil赋给该变量

3.Lua数据类型
    nil boolean number string function userdata thread table
    注:
    a.string可以使用[[ ]]表示整块的字符串
    b.字符串连接使用 ..
    c.可用#计算字符串长度
    d.table的创建可通过构造表达式来完成,最简单为{},创建空表,也可直接添加数据初始化
    e.table可视为数组,数组索引可为数字或字符串,默认初始索引以1开始
    f.table不会固定长度大小
    g.function可存在变量里
    h.协同程序与线程差不多,拥有独立的栈、局部变量、指令指针,可与其他协程共享全局变量等。但线程可以同时多个运行,但协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起时才会被暂停
    i.在 Lua 中对 0(number) 进行逻辑判断,得到的结果是 true

4.Lua变量
    a.Lua 中的变量全是全局变量,无论语句块或是函数里,除非用 local 显式声明为局部变量,变量默认值均为nil
    b.Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量.
    a, b = 10, 2*x       <-->       a=10; b=2*x
    c.应该尽可能的使用局部变量(可避免命名冲突、速度更快)

5.Lua函数
    a.函数支持同时返回多个值
    b.函数可接受可变数目的参数
        function add(...)
    c.闭包函数是指将一个函数写在另一个函数之内,内部函数可以访问外部函数的局部变量。内部函数没有名称,通常也叫匿名函数
        function newCounter()
        local i = 0
        return function()
                i=i+1
                return i
            end
        end
        c1 = newCounter()
        print(c1())    --> 1
        print(c1())    --> 2

6.Lua运算符(要点)
    a.逻辑运算-与或非:and or not
    b.关系运算-不等于:~=
    c.运算符优先级
    从高到低的顺序:

    ^
    not    - (unary)
    *      /
    +      -
    ..
    <      >      <=     >=     ~=     ==
    and
    or

7.table = 数组+映射(博客摘录)
1)数组
    ①a = {}
    a[1]=1
    a[2]=5
    a[3]="hello"
    print(a[1],a[2],a[3])

    ②a = {1,5,"hello"}
    print(a[1],a[2],a[3])

    这两种定义方式效果一样。
    
2)映射
    类似于C语言中的map,[]里面的是key值。(数据库的table)

    ①a= {}
    a["hello"]=2
    a[3]=false
    print(a.hello,a[3])

    ②a={["hello"]=2,[3]=false}
    print(a.hello,a[3])
    
    这两种定义方式效果一样。

8.迭代器之数组遍历:
    for k,v in ipairs(t) do ... end
  迭代器之Table遍历:
      for k,v in pairs(t) do ... end

资料参考:
https://blog.youkuaiyun.com/u013047859/article/details/51232768(Lua核心编程之基础)
https://blog.youkuaiyun.com/u013047859/article/details/51234245(Lua核心编程之进阶&amp;总结)
https://blog.youkuaiyun.com/xuzhonghai/article/details/7297560(大体了解Lua的语法) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值