变量

作者: 爱折腾的傻小子 | 来源:发表于2021-01-04 09:50 被阅读0次

    Lua变量

    • 变量在使用前,必须在代码中进行声明,即创建该变量(编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值)
    • Lua 变量有三种类型:全局变量、局部变量、表中的域
      • 函数外部的变量默认为全局变量,除非用local声明为局部变量
      • 函数内的变量与函数的参数默认为局部变量
    • 局部变量的作用域为从声明位置开始到所在语句块结束(或直到下一个同名局部变量的声明)
    • 变量的默认值均为 nil
    bb1 = 10        -- 全局变量
    local bb2 = 1   -- 局部变量
    
    function j()
        cc = 1          -- 全局变量
        local dd = 2    -- 局部变量
    end
    
    print(bb1)  -- 10
    print(bb2)  -- 1
    j()
    print(cc)   -- 1
    print(dd)   -- nil
    
    -- 代码块
    do
        local aa1a = 4      -- 局部变量
        cds = 2             -- 全局变量
        print(aa1a, cds)    -- 4 2
    end
    
    print(aa1a, cds)        -- nil 2
    

    赋值语句

    • 赋值是改变一个变量的值和改变表域的最基本的方法
    -- 赋值语句
    axa = "hello" .. "world!"
    t = {n = 1}
    t.n = t.n + 1
    print(axa)  -- helloworld!
    print(t.n)  -- 2
    
    • Lua可以对多个变量同时赋值
      • 变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量
    t1, t2 = 1, 11
    print(t1, t2)   -- 1 11
    
    • 遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作,所以我们可以这样进行交换变量的值
    t1, t2 = 1, 11
    print(t1, t2)   -- 1 11
    
    -- 变量值交换 swap
    t1, t2 = t2, t1
    print(t1, t2)   -- 11 1
    
    ss = {2, 4}
    -- swap lua的键从1开始
    ss[1], ss[2] = ss[2], ss[1]
    print(ss[1], ss[2]) -- 4 2
    
    • 当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略
    a. 变量个数 > 值的个数             按变量个数补足nil
    b. 变量个数 < 值的个数             多余的值会被忽略 
    
    axaa, axbb, axcc = 1,2
    print(axaa, axbb, axcc) -- 1 2 nil
    
    ada, adq = 5, 6, 9
    print(ada, adq)         -- 5 6
    
    -- 注意这种赋值情况
    csf, wdf, edda = 2
    print(csf, wdf, edda)   -- 2 nil nil
    
    fgr, dkd, ofr = 2, 2, 2
    print(fgr, dkd, ofr)    -- 2, 2, 2
    
    • 多值赋值经常用来交换变量,或将函数调用返回给变量
    function t()
        return 111, 200
    end
    
    -- t()返回两个值,第一个赋值给gg1,第二个值返回给gg2
    gg1, gg2 = t()
    print(gg1, gg2) -- 111 200
    
    • 应该尽可能的使用局部变量,总结
      • 避免命名冲突
      • 访问局部变量的速度比全局变量更快

    索引

    • 对 table 的索引使用方括号 []
    • Lua 也提供了 . 操作
    site = {}
    site["key"] = "csd sss"
    print(site["key"])  -- csd sss
    print(site.key)  -- csd sss
    

    相关文章

      网友评论

          本文标题:变量

          本文链接:https://www.haomeiwen.com/subject/derhoktx.html