当前位置:

首页 > 编程开发 > Lua语言新手简单入门教程

Lua语言新手简单入门教程

Lua是轻量小巧的脚本语言,用标准C编写,源码开放,可嵌入应用程序提供扩展。解释器仅200KB,速度最快。支持双向调用C/C++,语法简单,支持面向对象、函数式编程及自动内存管理。安装简便,代码以.lua后缀运行。

本文目录

    Lua 是一门很有意思的脚本语言——轻量、小巧,用标准 C 语言编写,源码完全开放。它的设计初衷很简单:嵌入到应用程序里,给宿主程序提供灵活的扩展和定制能力。

    这不,游戏开发、独立应用脚本、Web 应用脚本、扩展和数据库插件、安全系统……到处都能看到它的身影。当然,很多人接触 Lua 的契机,是在 Nginx 和 Redis 里写脚本——通过在 Web 层嵌入 Lua,可以极大提升灵活性和性能。

    Lua语言新手简单入门教程

    特点

    • Lua 可以轻松地被 C/C++ 代码调用,反过来也能调用 C/C++ 的函数——双向通信非常顺畅。
    • 它用标准 C 编写,代码简洁优雅,几乎能在所有操作系统和平台上编译运行。
    • 体积极小,语法简单,功能却很全面。一个完整的 Lua 解释器不过 200KB,在目前所有脚本引擎中,Lua 的速度是最快的。
    • 与宿主语言的接口简洁明了,很容易嵌入到其他语言中使用。

    特性

    • 支持面向对象编程
    • 轻量级
    • 可扩展
    • 支持函数式编程
    • 自动内存管理
    • 通用类型 —— table,可以实现数组、哈希表、集合、对象
    • 支持闭包
    • 支持多线程
    • 支持交互式编程

    安装

    注意:安装 Lua 之前,请确保系统已经安装了 readline 和 readline-devel。如果没有,先执行 yum install -y readline readline-devel。

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

    配置完成后,在命令行输入 lua -v 验证:

    Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
    

    能看到版本信息,说明安装成功。

    运行方式

    和其他脚本语言一样,我们需要把 Lua 代码写在以 .lua 为后缀的文件里。运行时,直接在命令行敲 lua xx.lua 即可。

    语法

    4.1 数据类型

    Lua 中有 8 种基本数据类型:nil、boolean、number、string、userdata、function、thread 和 table。

    数据类型 说明
    nil 表示无效值,在条件表达式中等同于 false。
    boolean 布尔值,包含 true 和 false。
    number 双精度浮点数。
    string 字符串,用双引号或单引号括住。
    userdata 任意存储在变量中的C数据结构。
    function 由C或Lua编写的函数。
    thread 独立线程,用于执行协同程序。
    table 关联数组,索引可以是数字或字符串。

    举个例子:

    a=10
    str="hello world"
    

    Lua 不需要声明变量类型,直接用 type() 函数就能判断类型。

    注意:Lua 的变量有三种:全局变量、局部变量和表中的域。默认情况下,不管在哪里声明的变量都是全局变量;用 local 修饰的才是局部变量。变量默认值是 nil。

    4.2 运算符

    1) 赋值运算符

    str="hello".."world" -- 用 .. 连接字符串
    a,b=10,15 -- a=10, b=15
    c,d,e=1,2 -- c=1, d=2, e=nil
    

    2) 算术运算符

    a,b=10,15
    c=a+b -- 加
    d=a-b -- 减
    e=a*b -- 乘
    f=a/b -- 除
    g=a%b -- 求余
    h=a^2 -- 乘方
    i=-a -- 取负
    

    3) 关系运算符

    a,b=10,15
    print(a>b)  -- 大于
    print(a
    
    

    4) 逻辑运算符

    print(true and false) -- 与
    print(true or false) -- 或
    print(not true)      -- 非
    

    5) 其他运算符

    操作符 说明
    .. 连接两个字符串
    # 返回字符串或表的长度,如 #"lua"

    4.3 流程控制

    1) 条件判断,有三种写法:

    -- if 语句
    if(true)
    then
     print("hello")
    end
    
    -- if .. else 语句
    a,b=10,15
    if(a>b)
    then
     print(a)
    else
     print(b)
    end
    
    -- if 嵌套
    c=20
    if(c>10)
    then
     if(c<30)
     then
     print(c)
     end
    end
    

    2) 循环,有四种写法:

    类型 说明
    while 循环 条件为 true 时重复执行语句。
    for 循环 重复执行指定语句,次数在 for 中控制。可以遍历数字或泛型。
    repeat .. until 重复执行直到指定条件为真为止。
    循环嵌套 循环内嵌套多个循环语句。

    例子:

    -- while 循环
    a=10
    while(a>0)
    do
     print(a)
     a=a-1
    end
    
    -- for 循环(遍历数字)
    for a=1,10,1 do
     print(a)
    end
    
    -- repeat .. until 循环
    a=10
    repeat
     print(a)
     a=a-1
    until(a<1)
    

    4.4 数组

    Lua 的数组大小不固定,下标从 1 开始。

    arr={"h","e","l","l","o"}
    -- 用数字遍历
    for index=1,#arr do
     print(arr[index])
    end
    -- 用泛型遍历
    for i,v in ipairs(arr) do
     print(i,v)
    end
    

    4.5 函数

    -- 案例 1
    function calc(a,b,c)
     return a+b+c
    end
    result=calc(1,2,3)
    print(result)
    
    -- 案例 2:返回多个值
    function getCalc(a,b,c)
     return a,b,c
    end
    r1,r2,r3=getCalc(1,2,3)
    print(r1,r2,r3)
    

    Lua 中的函数允许一次返回多个值——这个特性在很多场景下非常方便。

    4.6 table

    table 是 Lua 里最重要的数据结构,有点类似 Ja va 中的 Map,或者 Ja vaScript 中的 JSON 对象。它使用关联数组,可以用任意类型的值做索引(但不能是 nil),大小也不固定。

    person={}
    person.name="jack"
    person.age=20
    print(person[1])
    print(person.name)
    print(person["age"])
    

    4.7 模块和包

    模块相当于一个封装好的库。从 Lua 5.1 开始,Lua 加入了标准的模块管理机制——可以把一些公共代码放在一个文件里,通过 API 接口在其他地方调用,有利于代码复用和降低耦合。

    本质上,Lua 的模块就是一个由变量、函数等元素组成的 table。

    比如,创建一个 module.lua 文件:

    module={}
    module.index=1
    function module.sum(a,b)
     return a+b
    end
    

    在另一个文件中引入:

    -- 此处 module 是文件名
    require "module"
    -- 此处 module 是引入模块中定义的名称
    print(module.index)
    print(module.sum(1,2))
    

    总结

    Lua 的语法简洁、体积小、速度快,特别适合作为嵌入式脚本使用。掌握了这些基础,就可以在 Nginx、Redis 甚至游戏引擎中灵活运用了。希望这篇入门指南能帮你快速上手。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    编程语言的编程模型
    编程语言的编程模型

    编程模型涵盖面向过程的C语言、面向对象的Ruby、基于栈的PostScript、基于规则的Prolog、基于原型的Lua、函数式的Erlang/Haskell及混合模型的Scala/Clojure。类型系统区分强类型与弱类型、动态类型与静态类型,元编程允许运行时操作代码,提升表达力。

    lua 如何获取指定路径下的所有文件夹
    lua 如何获取指定路径下的所有文件夹

    Lua编程语言轻量级且小巧,可用io.popen执行系统命令获取指定路径下所有文件夹:在Windows系统下使用dir/b/s命令,在Unix系统下使用find-typef命令。然而官方更推荐使用lfs库进行递归遍历,通过lfs.dir和lfs.attributes函数筛选目录,此法避免系统命令依赖,代码简洁且跨平台效果更佳。

    lua调用C/C++的方法详解
    lua调用C/C++的方法详解

    Lua通过虚拟栈与C/C++交互,将C函数封装为接口供其调用。调用时,C从栈中获取参数并返回结果,参数传递与结果返回均通过栈操作完成,从而实现了Lua对C能力的高效、便捷调用,使得Lua能无缝利用C语言的高性能库。

    详解Lua中的元表和元方法
    详解Lua中的元表和元方法

    一、元表 元表是Lua中一个挺有意思的机制——它允许我们在一个值遇到未知操作时,给出自定义的行为。本质上,元表也是用table来承载的,所以熟悉了table,也就掌握了元表的基本用法。 不过得注意,元表只能针对一组预先定义好的操作集合做扩展,比面向对象中的类要受限得多。最典型的一点:元表不支持继承。

    如何使用Vim搭建Lua开发环境详解
    如何使用Vim搭建Lua开发环境详解

    基于SpaceVim搭建Lua开发环境,需先安装Neovim、Nerd字体及支持真色的终端,启用lang#lua模块后,即可获得全面的代码补全、语法检查、工程文件跳转、一键运行、代码格式化及交互式编程等高效开发功能,大幅提升编程效率与体验。

    Luvit像Node.js一样写Lua应用
    Luvit像Node.js一样写Lua应用

    先问个问题:如果你是一个Lua开发者,手头刚好有异步I/O的需求,你会怎么办?传统方案当然有,但要说最接近Node.js体验的,还得是Luvit。简单来说,它就是Lua界的Node.js——把Lua和libUV撮合在一起,再加上JIT加持,用项目自己的话说:Lua + libUV + JIT = p

    Lua流程控制语句if else的使用示例
    Lua流程控制语句if else的使用示例

    Lua的流程控制,if和if else是基础。和C语言很像,if语句支持嵌套,也能和循环配合——比如在循环体内根据条件决定是否跳出,这在日常开发中非常实用。 1、if语句 先看最基本的if语法结构: if(布尔表达式) then --[ 在布尔表达式为 true 时执行的语句 --] end 来看一

    Lua中pairs与ipairs的区别总结
    Lua中pairs与ipairs的区别总结

    最近在写一个流量转发的东西,用到了 nginx_lua_module 这个模块,需要根据 Header、Body 和 Cookie,按照流量比例把请求转发到其他地方。翻看前人留下的代码,发现循环遍历时,有时候用 pairs,有时候用 ipairs,风格并不统一,读起来让人有点困惑。 好在 Lua 官

    Lua游戏开发教程之时区问题详解
    Lua游戏开发教程之时区问题详解

    通过Lua的os.date("!*t")获取UTC时间,结合服务器时区差值,可将游戏内时间统一显示为服务器所在地时间。计算活动倒计时时,需考虑本地时区与服务器时区的差异,转换时间戳后得到准确剩余时间。正确处理时区问题能解决多语种发行中的显示同步难题。

    深入谈谈lua中神奇的table
    深入谈谈lua中神奇的table

    Lua中的table可作为字典、数组、环境、模块、对象和类使用。字典支持任意非nil键类型,遍历无序;数组索引从1开始,#对空洞处理需谨慎。table掌管全局环境_G和局部环境_ENV,模块本质为table。对象通过闭包实现私有成员,冒号语法糖简化self传递;类借助元表__index实现继承。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。