博客
关于我
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
阅读量:795 次
发布时间:2023-02-06

本文共 3008 字,大约阅读时间需要 10 分钟。

Lua 变量与表结构

一、Lua 变量

Lua 中变量有三种类型:全局变量、局部变量和表中的域。

  • 全局变量:默认情况下,Lua 中所有变量都是全局变量,无需声明即可使用。

    b = 10print(b) -- b 是全局变量

    如果需要删除全局变量,可以将其赋值为 nil

    b = nilprint(b) -- b 已被删除
  • 局部变量:使用 local 显式声明的变量或函数参数是局部变量。

    local a = 10print(a) -- a 是局部变量

    局部变量的作用域从声明位置开始到所在语句块结束。

  • 表中的域:变量的默认值均为 nil。如果未赋值,表中的域会被视为 nil

二、Lua 数据类型与条件判断

Lua 是动态类型语言,不需要预先定义类型,值可以存储在变量中。

  • 数据类型:Lua 中有 8 个基本类型,包括 nil、boolean、number、string、userdata、function、thread 和 table。

    • nil:表示空值,在条件判断中相当于 false
    • boolean:布尔类型,truefalse
    • number:数值类型,相当于 C 语言的 double
    • string:字符串类型,由双引号或单引号表示。
    • function:函数类型。
    • table:关联数组,支持键为数字、字符串或其他表类型。
    • thread:表示执行的独立线路,用于协同程序。
    • userdata:表示任意存储在变量中的 C 数据结构。
  • 类型判断:使用 type 函数获取变量类型。

    print(type(1)) -- numberprint(type("hello")) -- string
  • 条件判断:Lua 的 if 判断条件理解为是否有效,nilfalse 为无效值,其余类型均为有效值。

    if b == nil or not b then  print("b 不存在或为假值")else  print("b 存在且为真值")end

三、Lua 表结构

表是 Lua 中最重要的数据结构,功能强大,支持哈希表、数组、字典等。

  • 表的创建与使用

    a = {} -- 创建空表a[10] = 1 -- 添加元素for i = 1, 15, 1 do  print(a[i])end

    输出结果为:

    123...(直到 15)
  • 表的索引:默认索引从 1 开始,键可以是数字、字符串或其他表类型。

    tb = {  '干饭',  '吃饭',  '恰饭'}-- 表中元素为 [1] = '干饭', [2] = '吃饭', [3] = '恰饭'
  • 自定义键与顺序

    tb = {  '干饭',  '吃饭',  '恰饭',  s = '溜达',  b = '哈哈哈',  _ = '饿了么'}-- 表中元素为 [1] = '干饭', [2] = '吃饭', [3] = '恰饭', ['s'] = '溜达', ['b'] = '哈哈哈', ['_'] = '饿了么'
  • 表的增删元素

    • 删除方式一:直接赋值为 nil,留下空位。
    tb = { '干饭', '吃饭', '恰饭' }tb[2] = nilprint(tb) -- [1] = '干饭', [2] = nil, [3] = '恰饭'
    • 删除方式二:使用 remove 方法,后续元素移位。
    tb = { '干饭', '吃饭', '恰饭' }table.remove(tb, 2)print(tb) -- [1] = '干饭', [2] = '恰饭'
  • 表的大小与遍历

    tb = { '干饭', '吃饭', '恰饭' }print(#tb) -- 表的大小为 3for i in pairs(tb) do  print(i, tb[i])end

    输出结果为:

    1    干饭2    吃饭3    恰饭

四、Lua 函数

Lua 函数具有灵活的特性,支持多重返回值、不定长参数和方法的语法糖。

  • 函数定义

    function func(...)endfunction func = function(...)end
    a = function(x, y)  return x * yendprint(a(2, 3)) -- 6
  • 多重返回值

    function retMultiple(...)  return ...endlocal a, b = retMultiple(1, 2)print(a, b) -- 1 2
  • 不定长参数

    function func(...)endlocal args = {...}print(args[1], args[2])
  • 方法的冒号与 self

    Account = {  balance = 0,  withdraw = function(self, v)    self.balance = self.balance - v  end}Account:withdraw(100)
  • 函数嵌套与闭包

    local f = function(n)  return function(x)    return x + n  endendprint(f(1)(2)) -- 3

五、Lua 函数常见写法

  • 直接构建函数
  • function func(...)  print(...)endfunc(123)
    1. 表构建与函数存储
    2. local tbTable = {}tbTable.func1 = function(...)  print(...)endtbTable.func2 = function(...)  print(...)endtbTable.func1(4, 5, 6)
      1. 嵌套函数调用
      2. local tbTable = {  key1 = 1,  func1 = function()    print(self.key1)  end}function tbTable:func1()
        1. 省略括号
        2. print("Hello") -- 可以省略括号func {1, 2, 3}

          六、函数嵌套与闭包

        3. 闭包特点
          • 使用 local 声明的变量在函数外相当于全局变量。
          • 函数嵌套调用时,参数通过闭包传递。
          1. 举例
          2. local f = function(n)  return function(x)    return x + n  endendprint(f(1)(2)) -- 3
            local p = 1local f = function()  local v = 0  return function()    v = v + p    print(v)  endenda, b = f(), f()print(a(), b())print(p = 2, a(), b())
            1. 表存储函数
            2. local tbTable = {  func1 = function(...)    print(...)  end,  func2 = function(...)    print(...)  end}print(tbTable.func1(4, 5, 6))

              七、总结

              Lua 是一门灵活且强大的小型编程语言,适合用于脚本编写和扩展性需求。通过理解变量、数据类型、表和函数的特性,开发者可以充分发挥 Lua 的潜力。

    转载地址:http://lsufk.baihongyu.com/

    你可能感兴趣的文章
    Logstash安装
    查看>>
    Logstash是什么,干什么用的?带你详细认识
    查看>>
    Logstash简介和部署---ElasticStack(ELK)工作笔记019
    查看>>
    logstash设置开机自启动
    查看>>
    logstash详解
    查看>>
    Logstash语法入门
    查看>>
    Logstash读取自定义日志以及解析处理_并把处理后数据上传至Elasticsearch---ElasticStack(ELK)工作笔记021
    查看>>
    Logstash配置详解---ElasticStack(ELK)工作笔记020
    查看>>
    loguru日志模块:简化Python自动化测试的日志管理!
    查看>>
    loj #6485. LJJ 学二项式定理 (模板qwq)
    查看>>
    Loj 6285. 数列分块入门 9
    查看>>
    LOJ#10064. 「一本通 3.1 例 1」黑暗城堡
    查看>>
    LOJ2542. 「PKUWC2018」随机游走【概率期望DP+Min-Max容斥(最值反演)】
    查看>>
    Loki 学习总结(1)—— Loki 中小项目日志系统的不二之选
    查看>>
    lol服务器维修时间2018,《英雄联盟》维护到几点结束 2018维护公告介绍
    查看>>
    Lombok
    查看>>
    lombok @EqualsAndHashCode 注解的影响
    查看>>
    Lombok 中 @EqualsAndHashCode注解的使用
    查看>>
    lombok 的使用讲解
    查看>>
    Lombok、Hutool等开发利器
    查看>>