• Lua笔记1


    Lua语法

    1.注释 --
    2.默认全局变量,不需要声明。删除变量赋值为nil
      Lua 中的变量全是全局变量,哪怕是语句块或是函数里,除非用 local 显式声明为局部变量。
      动态类型语言
    3.8个基本类型nil、boolean、number、string
                 userdata、function、thread、table
    4.nil作比较加双引号 type(x)=="nil"
    5.false和nil为false,其余都是true。0也是true。
    6.字符串由一对单引号或双引号表示。
      也可以用两个方括号表示“[[]]”
    7.数字字符串算术操作,会自动转化为数字进行算术运算。
      字符串连接使用“..”
    8.table是关联数组,索引可以是数字或字符串。
      索引可以使用方括号[]。当索引为字符串时可以使用“.”。

    -- table_test.lua 脚本文件
    a = {}  
    a["key"] = "value"  
    key = 10  
    a[key] = 22  
    a[key] = a[key] + 11  
    for k, v in pairs(a) do  
        print(k .. " : " .. v)  
    end  
    

    9.默认起始索引以1开始。
    10.table不会固定长度大小,会自动增长。
    11.函数可以存在变量里。

    -- function_test.lua 脚本文件
    function factorial1(n)
        if n == 0 then
            return 1
        else
            return n * factorial1(n - 1)
        end
    end
    print(factorial1(5))
    factorial2 = factorial1
    print(factorial2(5))
    

    12.function可以匿名函数的方式通过参数传递:

    -- function_test2.lua 脚本文件
    function testFun(tab,fun)
            for k ,v in pairs(tab) do
                    print(fun(k,v));
            end
    end
    
    
    tab={key1="val1",key2="val2"};
    testFun(tab,
    function(key,val)--匿名函数
            return key.."="..val;
    end
    );
    

    13.local 表局部变量,访问局部变量比全局变量快
    14.多个变量可同时赋值

    a, b = 10, 2*x       <-->       a=10; b=2*x
    

      会先计算右边所有的值然后再执行赋值操作

    x, y = y, x                     -- swap 'x' for 'y'
    a[i], a[j] = a[j], a[i]         -- swap 'a[i]' for 'a[j]'
    

      变量个数与值个数不一致

    a. 变量个数 > 值的个数             按变量个数补足nil
    b. 变量个数 < 值的个数             多余的值会被忽略
    

      经常用于交换变量或函数返回多个值情况:

    a, b = f()    --f()返回两个值,第一个赋给a,第二个赋给b。
    

    15.有goto语句
    16.函数返回多个值,可以以“,”分开。
    17.函数参数为可变参数时,用“...”代替,固定参数必须放在可变参数之前。
       可变参数可以赋给一个变量。

    local arg={...}    --> arg 为一个表,局部变量
    select("#",...)    --获取可变参数的数量
    select(n, …)       --数字n,那么select返回它的第n个可变实参
    

    18.不等号“~=”
    19.逻辑运算符:and、or、not
    20.计算表或字符串长度的运算符#

    #"Hello"       --返回 5
    

    21.换行
    22.lua是由c实现
    23.lua隶属于脚本语言,嵌入其他程序中。
    24.goto语句 + 标签(::tag_1::)
    代替continue:

    for i = 0, 5, 1 do
        if( xxxxxx ) then
            goto tag_1
        end
        --循环体
        
        ::tag_1::
    end
    

    25.for循环遍历table(多个值),不想用“_”变量名替代
    26.require加载模块,模块名不一定以文件名命名,也可以是文件夹名。和lua调取文件机制(菜鸟教程有详细调取路径)有关系。
    27.require、dofile、loadfile区别
    28.“.”和“:”区别:
    girl.goToMarket(girl,100) 等同于 girl:goToMarket(100)
    可以看出,冒号定义和冒号调用其实跟上面的效果一样。把第一个隐藏参数省略了,而该参数self指向调用者自身

    注释:使用markDown编辑。

  • 相关阅读:
    Bone Collector II(背包 求第k优解)
    How Many Answers Are Wrong (彻底理解带权并查集)
    System Testing(Codeforces Round #543 (Div. 2, based on Technocup 2019 Final Round))D
    Rikka with Minimum Spanning Trees徐州区域赛a题
    cin加速语句
    牛客练习赛41 b 666RPG (01背包)
    js字符串拼接优化
    nodejs中使用递归案例
    thunk的主要用法
    $in的方法总结
  • 原文地址:https://www.cnblogs.com/gaara-zhang/p/13043737.html
Copyright © 2020-2023  润新知