美文网首页
006-脚本语言之lua

006-脚本语言之lua

作者: 千转军师 | 来源:发表于2021-03-24 16:15 被阅读0次

    时间:2021年3月24日14:16:34

    参考:https://www.runoob.com/lua/lua-tutorial.html

    一、开始

    • Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
    • 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
    • 应用场景
      游戏开发
      独立应用脚本
      Web 应用脚本
      扩展和数据库插件如:MySQL Proxy 和 MySQL WorkBench
      安全系统,如入侵检测系统

    二、基础

    2.1 脚本

    • 安装软件包后,在命令行中执行命令,或者执型脚本文件。
      例如,输入:
    print("hello word!")
    
    • 脚本文件后缀是 .lua

    2.2 注释

    • 单行注释:--
    • 多行注释:
    --[[
      注释内容
    --]]
    

    2.3 标识符

    • 区分大小写;
    • 组成元素是大小写字母a-z和A-Z、数字0-9以及下划线;
    • 首字母必须为字母或者下划线,不能是数字;
    • 注意不要和关键字重复

    2.4 关键字

    and     break   do  else
    elseif  end     false   for
    function    if  in  local
    nil     not     or  repeat
    return  then    true    until
    while   goto        
    

    2.5 变量

    • 定义
    var1 = 10
    var2 = 'string'
    
    • 删除
      赋值为nil即为删除
    var = nil
    

    2.6 数据类型

    数据类型 描述
    nil 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
    boolean 包含两个值:false和true。
    number 表示双精度类型的实浮点数
    string 字符串由一对双引号或单引号来表示
    function 由 C 或 Lua 编写的函数
    userdata 表示任意存储在变量中的C数据结构
    thread 表示执行的独立线路,用于执行协同程序
    table Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

    2.7 字符串

    (1)表示方式

    str="string"
    str2='string'
    str3=[[
      good job!
    ]]
    

    (2)字符串连接用 ..
    取变量的字节长度用 #

    var1=10
    var2="good job"
    print(#var2 .. var1)
    

    2.8 table 表

    (1)定义

    --建立空的表
    local table = {}
    --直接初始化表
    local table = {"English", "Chines", "Math", "Physics", "Politics"}
    

    (2)使用
    有点类似于建立字典;
    表示关联的数组;
    可以设置唯一键值,通过映射关系找到关联的“表项”

    --建立空的表
    local ta = {}
    --赋值
    ta["key"] = "keyword"
    ta[10] = 20
    --打印
    for a, b in pairs(ta) do 
        print(a .. " : " .. b)
    end
    

    2.9 函数

    (1)关键词: function
    例子:

    function fun(n)
        if n >= 0 then
            return 1 
        else 
            return 0
        end
    end
    print(fun(10), fun(-10))
    

    (2)多返回值

    function fun()
        return 1,10
    end
    print(fun())
    

    (3)可变参数

    re = 0
    function sum(...)
        for i, v in ipairs{...} do
            re = re + v
        end 
        return re
    end
    print(sum(1,2,3,4,5))
    

    或者使用select函数

    re = 0
    function sum(...)
        for i=1, select('#',...) do
            re = re + select(i,...)
        end 
        return re
    end
    print(sum(1,2,3,4,5))
    

    2.10 变量

    默认为全局变量,使用关键词 local 修饰的变量为局部变量。
    (1)变量赋值

    --多个变量赋值
    num1, num2 = 1, 2
    --两个变量交换数值
    num1, num2 = num2, num1
    print(num1, num2)
    

    2.11 流程语句

    (1)条件语句
    关键字: if、else、then、end
    例子:

    if(1) then  
        print("1 is comming")
    else
        print("0 is comming")
    end
    

    (2)while循环
    语法:

    while(condition)
    do
       statements
    end
    

    (3)for循环
    语法:

    for var=exp1,exp2,exp3 do  
        <执行体>  
    end  
    

    以exp1和exp2为范围,exp3为步长做的循环,其中exp3可以不写,默认为1
    例子:

    for i=1,10,1 do
        print(i)
    end
    for i=10,1,-1 do
        print(i)
    end
    

    泛型for循环
    例子(也可以用 pairs):

    a = {"a", "b", "c"}
    for i, v in ipairs(a) do
        print(i,v)
    end
    

    (4)repeat - until循环
    语法:

    repeat
       statements
    until( condition )
    

    例子:

    a = 1
    repeat
       a = a + 1
       print(a)
    until( a > 10 )
    

    满足条件才会打破循环,这与c语言的do...while语句不同。

    2.12 运算符

    包括算术运算符、关系运算符和逻辑运算符,其中前两者与c语言类似,不展开写了,而逻辑运算符有:
    and、or、not
    例子:

    if(true and false) 
    then
        print("true and false")
    end
    if(true and true)
    then 
        print("true and true")
    end
    if(true or false) 
    then
        print("true or false")
    end
    if(true or true)
    then
        print("true or true")
    end
    if(not true)
    then
        print("not true")
    end 
    if(not false)
    then
        print("not false")
    end 
    

    2.13 字符串

    (1)定义
    单引号 'string'
    双引号"string"
    中括号[[stirng]]

    (2)转义字符

    转义字符 意义 ASCII码值(十进制)
    \a 响铃(BEL) 007
    \b 退格(BS) ,将当前位置移到前一列 008
    \f 换页(FF),将当前位置移到下页开头 012
    \n 换行(LF) ,将当前位置移到下一行开头 010
    \r 回车(CR) ,将当前位置移到本行开头 013
    \t 水平制表(HT) (跳到下一个TAB位置) 009
    \v 垂直制表(VT) 011
    \ 代表一个反斜线字符''' 092
    ' 代表一个单引号(撇号)字符 039
    " 代表一个双引号字符 034
    \0 空字符(NULL) 000
    \ddd 1到3位八进制数所代表的任意字符 三位八进制
    \xhh 1到2位十六进制所代表的任意字符 二位十六进制

    (3)字符串 操作

    • 大小写转换
      string.upper(arg) 和 string.lower(arg)
    • 字符串替换
      string.gsub(main_str, find_str, repalce_str, num)
    • 查找字符串并返回位置(注: [] 里面的参数代表可选)
      string.find(main_str, sub_str, [init, [end]])
    • 字符串反转
      sring.reverse(arg)
    • 字符串格式化获取(类似于C风格sprintf)
      string.format(...)
    • char将整形数字转化为字符并连接;byte将字节值转换为字符并连接
      string.char(arg)
      string.byte(arg[,int])
    • 计算字符串长度
      string.len
    • 返回字符串的n个拷贝
      string.rep(string, n)
    • 连接两个字符串
      ..
    • 寻找pattern模式下的字符串
      string.gmatch(str, pattern)
    • 寻找pattern模式下的字符串,并指定起始点
      string.match(str, pattern, init)

    2.14 数组

    和表类似,

    array={"1", "2"}
    

    三、常用函数

    • print :打印内容
      例子:
    print("OK")
    var = 1
    print("var ",var);
    
    • type:获取数据的类型,例子:
    var1=10
    var2='nfasf'
    print(type(var1))
    print(type(var2))
    print(type(true))
    

    四、基础2

    4.1 迭代器

    相关文章

      网友评论

          本文标题:006-脚本语言之lua

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