• Lua语法入门


    Lua语法入门

    Nginx编程需要用到Lua语言,因此必须先入门Lua的基本语法。

    1. 初识Lua

    Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。官网:https://www.lua.org/

    在这里插入图片描述

    Lua经常嵌入到C语言开发的程序中,例如游戏开发、游戏插件等。

    Nginx本身也是C语言开发,因此也允许基于Lua做拓展。

    2. HelloWorld

    CentOS7默认已经安装了Lua语言环境,所以可以直接运行Lua代码。

    1)在Linux虚拟机的任意目录下,新建一个hello.lua文件

    在这里插入图片描述

    2)添加下面的内容

    print("Hello World!")  
    
    • 1

    3)运行

    在这里插入图片描述

    3. 变量和循环

    任何语言必然离不开变量,而变量的声明必须先知道数据的类型。

    3.1. Lua的数据类型

    Lua中支持的常见数据类型包括:

    在这里插入图片描述

    另外,Lua提供了type()函数来判断一个变量的数据类型:

    在这里插入图片描述

    3.2. 声明变量

    Lua声明变量的时候无需指定数据类型,而是用local来声明变量为局部变量:

    -- 声明字符串,可以用单引号或双引号,
    local str = 'hello'
    -- 字符串拼接可以使用 ..
    local str2 = 'hello' .. 'world'
    -- 声明数字
    local num = 21
    -- 声明布尔类型
    local flag = true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Lua中的table类型既可以作为数组,又可以作为Java中的map来使用。数组就是特殊的tablekey是数组角标而已:

    -- 声明数组 ,key为角标的 table
    local arr = {'java', 'python', 'lua'}
    -- 声明table,类似java的map
    local map =  {name='Jack', age=21}
    
    • 1
    • 2
    • 3
    • 4

    Lua中的数组角标是从1开始,访问的时候与Java中类似:

    -- 访问数组,lua数组的角标从1开始
    print(arr[1])
    
    • 1
    • 2

    Lua中的table可以用key来访问:

    -- 访问table
    print(map['name'])
    print(map.name)
    
    • 1
    • 2
    • 3

    3.3. 循环

    对于table,我们可以利用for循环来遍历。不过数组和普通table遍历略有差异。

    遍历数组:

    -- 声明数组 key为索引的 table
    local arr = {'java', 'python', 'lua'}
    -- 遍历数组
    for index,value in ipairs(arr) do
        print(index, value) 
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    遍历普通table

    -- 声明map,也就是table
    local map = {name='Jack', age=21}
    -- 遍历table
    for key,value in pairs(map) do
       print(key, value) 
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4. 条件控制、函数

    Lua中的条件控制和函数声明与Java类似。

    4.1. 函数

    定义函数的语法:

    function 函数名( argument1, argument2..., argumentn)
        -- 函数体
        return 返回值
    end
    
    • 1
    • 2
    • 3
    • 4

    例如,定义一个函数,用来打印数组:

    function printArr(arr)
        for index, value in ipairs(arr) do
            print(value)
        end
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.2. 条件控制

    类似Java的条件控制,例如ifelse语法:

    if(布尔表达式)
    then
       --[ 布尔表达式为 true 时执行该语句块 --]
    else
       --[ 布尔表达式为 false 时执行该语句块 --]
    end
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    java不同,布尔表达式中的逻辑运算是基于英文单词:

    在这里插入图片描述

    4.3. 案例

    需求:自定义一个函数,可以打印table,当参数为nil时,打印错误信息

    function printArr(arr)
        if not arr then
            print('数组不能为空!')
        end
        for index, value in ipairs(arr) do
            print(value)
        end
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    Jetbrains New UI 尝鲜
    【ArcGIS Pro二次开发】(76):面积平差工具
    HTML中已经过时的标签
    使用GPT生成python图表
    mysql 锁定解除
    ch12、字符串(string)与字符编码
    python进制和编码
    提的最多的数据库“索引”,先来简单了解一下
    PAM从入门到精通(五)
    c语言练习题81:颠倒二进制位
  • 原文地址:https://blog.csdn.net/qq_37726813/article/details/134276772