• Lua脚本语言快速入门手册


    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

    学了两天Lua语言,感叹其短小精悍,上手极快,语法还很舒服,不错!整理下学习过程中经常用到的基础知识,共勉!

    Lua用法简述

    Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式程序移植到其他应用程序,它是由C语言实现的,虽然简单小巧但是功能强大,所以许多应用都选用它作为脚本语言,尤其是在游戏领域,例如大名鼎鼎的暴雪公司将Lua语言引入到“魔兽世界”这款游戏中,Rovio公司将Lua语言作为“愤怒的小鸟”这款火爆游戏的关卡升级引擎,Web服务器Nginx将Lua语言作为扩展,增强自身功能。Redis将Lua作为脚本语言可帮助开发者定制自己的Redis命令,在这之前,必须修改源码。在介绍如何在Redis中使用Lua脚本之前,有必要对Lua语言的使用做一个基本的介绍。

    Linux 系统上安装

    Linux & Mac上安装 Lua 安装非常简单,只需要下载源码包并在终端解压编译即可,本文使用了5.3.0版本进行安装:

    curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
    tar zxf lua-5.3.0.tar.gz
    cd lua-5.3.0
    make linux test
    make install
    

    Mac OS X 系统上安装

    curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
    tar zxf lua-5.3.0.tar.gz
    cd lua-5.3.0
    make macosx test
    make install
    

    接下来我们创建一个 HelloWorld.lua 文件,代码如下:

    print("Hello World!")
    

    执行以下命令:

    $ lua HelloWorld.lua
    

    输出结果为:

    Hello World!
    

    1.数据类型及其逻辑处理

    Lua语言提供了如下几种数据类型:booleans(布尔)、numbers(数值)、strings(字符串)、tables(表格),和许多高级语言相比,相对简单。下面将结合例子对Lua的基本数据类型和逻辑处理进行说明。

    1.字符串

    下面定义一个字符串类型的数据:

    local strings val = "world"
    

    其中,local代表val是一个局部变量,如果没有local代表是全局变量。
    print函数可以打印出变量的值,例如下面代码将打印world,其中"--"是Lua语言的注释。

    -- 结果是"world"
    print(hello)
    

    2.数组

    在Lua中,如果要使用类似数组的功能,可以用tables类型,下面代码使用定义了一个tables类型的变量myArray,但和大多数编程语言不同的是,Lua的数组下标从1开始计算:

    local tables myArray = {"redis", "jedis", true, 88.0}
    --true
    print(myArray[3])
    

    如果想遍历这个数组,可以使用for和while,这些关键字和许多编程语言是一致的。

    for

    下面代码会计算1到100的和,关键字for以end作为结束符:

    local int sum = 0
    for i = 1, 100
    do
        sum = sum + i
    end
    -- 输出结果为5050
    print(sum)
    

    要遍历myArray,首先需要知道tables的长度,只需要在变量前加一个#号即可:

    for i = 1, #myArray
    do
    print(myArray[i])
    end
    

    除此之外,Lua还提供了内置函数ipairs,使用for index,value ipairs(tables)可以遍历出所有的索引下标和值:

    for index,value in ipairs(myArray)
    do
    print(index)
    print(value)
    end
    

    while

    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

    下面代码同样会计算1到100的和,只不过使用的是while循环,while循环同样以end作为结束符。

    local int sum = 0
    local int i = 0
    while i <= 100
    do
        sum = sum + i
        i = i + 1
    end
    --输出结果为5050
    print(sum)
    

    if else

    要确定数组中是否包含了jedis,有则打印true,注意if以end结尾,if后紧跟then:

    local tables myArray = { "redis", "jedis", true, 88.0 }
    for i = 1, #myArray
    do
        if myArray[i] == "jedis"
        then
            print("true")
            break
        else
            --do nothing
        end
    end
    

    3.哈希

    如果要使用类似哈希的功能,同样可以使用tables类型,例如下面代码定义了一个tables,每个元素包含了key和value,其中strings1..string2是将两个字符串进行连接:

    local tables user_1 = {age = 28, name = "tome"}
    --user_1 age is 28
    print("user_1 age is " .. user_1["age"])
    

    如果要遍历user_1,可以使用Lua的内置函数pairs:

    for key,value in pairs(user_1)
    do print(key .. value)
    end
    

    2.函数定义

    在Lua中,函数以function开头,以end结尾,funcName是函数名,中间部分是函数体:

    function funcName()
    ...
    end
    

    contact函数将两个字符串拼接:

    function contact(str1, str2)
    return str1 .. str2
    end
    --"hello world"
    print(contact("hello ", "world"))
    

    我的其它文章

    Lua 教程:菜鸟教程

    OpenResty入门之使用Lua开发Nginx插件

    Redis进阶之使用Lua脚本自定义Redis命令

    SpringBoot通过RedisTemplate执行Lua脚本

    版权声明

    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

  • 相关阅读:
    LockFree的栈实现及与加锁实现的性能对比
    redis源码笔记-redis.conf
    【ASP.NET】应用程序、页面和控件的生命周期
    【ASP.NET】HTTP客户请求的数据格式说明
    【ASP.NET】页面间传值
    【ASP.NET】Page.IsPostBack 属性
    【ASP.NET】互联网HTTP连接等出错代码大全
    【经验分享】抽象类、虚函数、接口、多态 概念与关系的理解
    【架构设计】需求分析
    【经验分享】常用正则表达式收集
  • 原文地址:https://www.cnblogs.com/onblog/p/13043472.html
Copyright © 2020-2023  润新知