Lua基础语法(上篇)

news/2026/1/23 20:00:05/文章来源:https://www.cnblogs.com/luatos/p/19523904

初识 Lua

Lua 是一种轻量小巧的脚本语言,它用标准C语言编写并以源代码形式开放。这意味着什么呢?这意味着Lua虚拟机可以很方便的嵌入别的程序里,从而为应用程序提供灵活的扩展和定制功能。而整个Lua虚拟机编译后仅仅一百余K,经过适当的裁剪还能做到更小,十分适合嵌入式的开发。

同时,在目前脚本引擎中,Lua的运行速度占有绝对优势。这些都决定了Lua是作为嵌入式脚本的最佳选择。

在我们编写代码之前,需要做一下准备,就是:确保你输入标点符号时,用的不是中文输入法。

一、第一个 Lua 程序

几乎所有语言的第一行代码,都是输出hello world,本教程也不意外。

在Lua中,打印结果只需要使用print这个函数即可。同时,如果需要使用函数,只需要在函数名后加上双括号,同时传入你想传入的值即可。

所以,我们来执行下面的代码,打印出hello world吧!
image

二、输出数据

上一部分,我们知道了,在Lua中,可以使用print函数来打印你想要得到的结果。

并且还知道了,函数是指可以实现某些功能的子程序,可以使用函数名(参数)来执行。

让我们试着输出一些其他东西吧!使用多个print函数,输出自己想输出的数据。

image

三、代码注释

代码注释就是在代码里,不会运行的部分。注释完全不会被运行。

这部分是为了在查看代码时,可以更好地立即现有代码含义用的。

我们可以用--开头,来写一段单行注释

也可以用--[[开头,]]结尾,写一段多行注释。

下面是注释的例子:
image

四、变量

4.1 number变量

变量,可以看作是一个桶,在里面装你想要装的内容。这些内容可以是Lua包含的所有合法类型。

例如:我想要新建一个桶,名叫bucket,在里面放入233这个数字,就可以像下面一样:
image

让我们试着自己新建几个变量吧!

新建变量year,并将变量的值设置为1926

新建变量month,并将变量的值设置为8

新建变量day,并将变量的值设置为7
image

4.2 了解nil

nil类型表示没有任何有效值,只要是没有声明的值,它就是nil

比如我打印一个没有声明的值,便会输出nil:
image

这里需要你思考一下,运行以下代码,将会输出什么结果?
image

4.3 赋值语句

赋值是改变一个变量值的最基本的方法。

如下面一样,使用等号对左边的变量进行赋值
image
Lua可以对多个变量同时赋值,变量用逗号分开,赋值语句右边的值会依次赋给左边的变量。
image

当左右值的数量不一致时,Lua会进行下面的设定:

变量个数 > 值的个数:按变量个数补足nil

变量个数 < 值的个数:多余的值会被忽略

下面的例子可以展示这种设定:
image
这里需要你思考一下,运行以下代码,将会输出什么结果?
image

4.4 交换变量

这部分需要你自己完成一个任务:

已知下面的代码,并且已知a和b的值,请在交换他们的值,使打印输出12 34
image

4.5 输出变量

我们已经知道了,在Lua中,可以使用print函数来打印你想要得到的结果。

同时在上一节,我们学会了新建变量和设置变量的值。

让我们试着输出某个变量吧!使用print函数,输出已知变量。 我们已知变量num为某个数字,试着输出它的值吧!

image

4.6 算数运算符

运算符是一个特殊的符号,用于告诉解释器执行特定的数学或逻辑运算。

上一节中,新建的数字变量,我们称之为number类型的变量。

本节我们来学习使用算术运算符,如下所示:

image

我们可以通过以下实例来理解算术运算符的应用:
image

你需要完成下面的任务:

已知,一个长方体的长宽高分别为a、b、c(单位米),且这个物体重量为m(单位克)

请打印出物体的密度(单位g/m³)

注:密度计算公式 密度 = 质量 / 体积
image

六、字符串

6.1 string类型变量

字符串(即string),就是一串文本数据,可以存储你要的文本。

在第二节中,print出的数据就是一个字符串。

Lua 语言中字符串可以使用以下三种方式来表示:

  1. 单引号间的一串字符

  2. 双引号间的一串字符

  3. [[和]]间的一串字符

你可以参考下面的例子来深入理解:
image

接下来你需要完成下面的练习:

新建三个变量s1、s2、s3

分别存入字符串数据:str、abc、233,使输出打印正确

image

6.2 转义字符

在上一节中,我们学习了如何声明字符串。

但是我们有时候会遇到一些特殊的问题,如:如何输出单引号和双引号?如何输出回车换行?

也许我们可以用下面的方式简单规避,输出单引号时,声明字符串用双引号括起来,像下面这样
image
同理,输出双引号时,声明字符串用单引号括起来,像下面这样
image

但是,这样会出现一个问题:如何同时显示单引号和双引号?这里就需要转义字符登场了。

转义字符用于表示不能直接显示的字符,比如后退键、回车键、等。

以 \ 开头的都是转义字符,下面时常用的转义字符格式:
image
例如,如果我们想给str赋值一个单引号,一个双引号('"),那么我们可以这样写:
image

下面需要你来完成一个简单的任务:

新建一个变量str,给str赋值为

ab\cd"ef'g\h]]

并打印出来
image

6.3 string拼接

字符串和字符串可以相加吗?可以!我们可以用拼接符号来将两个独立的字符串拼起来。

我们使用..来表示字符串拼接符号,如下面的示例代码:

image

下面你要完成这个任务:

已知三个字符串变量s1、s2、s3

请将他们按顺序拼接起来,存入all,并使用print输出结果
image

6.4 number转string

上面一节学习了如何拼接字符串,这个方法固然很好用,但是有时候我们会遇到一个需求,那就是把number类型的变量和string类型的变量拼接起来,组成一个新的string

比如下面的变量n和s,如何拼接起来呢?
image
我们可以直接将number类型的变量n转换成string类型的值,这样就可以拼接了

使用tostring(value)函数即可实现这一操作:
image

下面你要完成这个任务:

已知三个变量n1、s、n2

然后将他们按顺序拼接起来,存入变量result,使输出结果正确

小提示:在某些情况下,Lua会自动将number类型转换成string类型
image

6.5 string转number

上面一节学习了如何将number转成string,这一节我们来学习如何将string转成number

比如下面的变量s,存储的内容是一个字符串,但是代表了一个数字,如何转成number再与n相加计算呢?

image

我们可以直接将string类型的变量s转换成number类型的值,这样就可以计算了

使用tonumber(value)函数即可实现这一操作:
image

下面你要完成这个任务:

已知三个字符串变量s1、s2、s3,其内容均为纯数字

请计算他们的算术和,赋值给新建的变量result,使下面代码输出正确结果
image

七、逻辑运算

7.1 布尔型和比较运算

布尔型(boolean)只有两个可选值:true(真) 和 false(假)

Lua 把 false 和 nil 看作是false,其他的都为true(包括0这个值,也是相当于true)

Lua 中也有许多的关系运算符,用于比较大小或比较是否相等,符号及其含义如下表:
image

我们可以通过以下实例来更加透彻的理解关系运算符的应用:
image

下面问题来了,运行以下代码,将会输出什么结果?请自行思考
image

7.2 逻辑运算符

逻辑运算符基于布尔型的值来进行计算,并给出结果,下表列出了 Lua 语言中的常用逻辑运算符:
image
我们可以通过以下实例来更加透彻的理解逻辑运算符的应用:
image
下面问题来了,运行以下代码,将会输出什么结果?
image

7.3 检验大小(自测题)

题目:如果已知number变量n,那么如果需要判断n是否符合下面的条件:

3<n≤10

以下四行判断代码,正确的是?
(返回true即表示变量n符合要求)

image

八、分支判断

8.1 条件判断

上面一节学习了布尔类型,那么这个需要用到哪里呢?我们需要用它来进行某些判断。

在Lua中,可以使用if语句来进行判断,如下面所举例的代码,可以判断n是否为小于10的数:

image

我们整理一下,实际上if语句就是如下结构:
image

下面是你需要完成的事:

已知变量n,请判断n是否为奇数,如果是,请给n的值加上1

如果你觉得有难度,请查看下面的提示:

求出n除以2的余数:n % 2

给n的值加上1:n = n + 1
image

8.2 多条件判断

上面一节学习了简单的if语句写法,这一节我们来学习多条件分支语句

在Lua中,可以使用if语句来进行判断,同时可以使用else语句,表示多个分支判断
image

举个例子,比如有一个数字n:

  • 当它大于等于0、小于5时,输出太小,

  • 当它大于等于5、小于10时,输出适中,

  • 当它大于等于10时,输出太大,

那么代码就像如下这样:
image
注意:else和elseif都是可选的,可有可无,但是end不能省略

下面是你需要完成的事:

已知变量n,请判断n是否为奇数,

如果是,请给n的值加上1

如果不是,请将n的值改为原来的两倍
image

8.3 判断三角形合法性(自测题)

你需要使用前面几章的知识,来完成下面的题目

已知三个number类型的变量a、b、c,分别代表三根木棒的长度

请判断,使用这三根木棒,是否可以组成一个三角形(两短边之和大于第三边)

如果可以组成,就打印出true

如果不可以,就打印false
image

8.4 if的判断依据(自测题)

我们在前面了解到,Lua 把 false 和 nil 看作是false,其他的都为true(包括0这个值,也是相当于true)

那么问题来了,执行下面的代码,将会输出什么?

image

下篇继续介绍哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1206342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

驱动千店销售转化提升10%:3C零售门店的人效优化实战方案

运营现状&#xff1a;经验驱动型排班的增长瓶颈 在3C零售领域&#xff0c;门店的核心竞争力始终围绕“人货场”的匹配精度展开&#xff0c;而A集团在深度调研中发现&#xff0c;其经销商门店正面临着一个制约增长的核心困境——长期依赖手工排班模式&#xff0c;往往出现销售能…

破解出海管理“消耗战”:中企如何用数字化工具赢得海外团队信任?

当“管控”在海外失效&#xff0c;什么才是解药&#xff1f;在全球化征程中&#xff0c;许多中国企业管理者都体验过一种深深的无力感&#xff1a;曾经在国内市场被验证卓有成效的管理手段&#xff0c;在海外团队面前却频频碰壁。这种困境非常普遍——出海管理极易演变为一场无…

【通信】基于matlab DPCM编码及2DPSK调制数字频带通信系统仿真【含Matlab源码 15019期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

【光学】基于matlab水波在多个垂直薄板下的透射系数【含Matlab源码 15013期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

【图像加密】基于matlab双随机相位编码和压缩传感实现安全图像加密【含Matlab源码 15009期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

2026年 不锈钢模块/不锈钢加工厂/不锈钢剪板折弯厂家推荐排行榜:匠心工艺与精密制造实力解析

2026年不锈钢模块/不锈钢加工厂/不锈钢剪板折弯厂家推荐排行榜:匠心工艺与精密制造实力解析 在现代工业制造体系中,不锈钢以其卓越的耐腐蚀性、高强度及美观的金属质感,成为高端装备、精密仪器、建筑装饰及特种环境…

基于 Vue + VueUse 的 WebSocket 优雅封装:打造高可用的全局连接管理方案

在现代前端开发中&#xff0c;WebSocket 作为全双工通信协议&#xff0c;被广泛应用于实时消息推送、在线协作、实时数据监控等场景。但原生 WebSocket API 使用繁琐&#xff0c;且在多连接、重连、心跳检测、状态管理等场景下需要大量重复代码。本文将分享基于 Vue3 VueUse 的…

AI赋能运营:数字化系统如何自动分配收益与激励?

前面讨论的精巧设计&#xff0c;都需要一个高效、公平的“Chao级大脑”来执行。这就是AI数字化系统。本文揭示技术如何成为运营的基石&#xff0c;让复杂商业模型得以完美运转。1. 自动化&#xff1a;解决运营中繁琐的“分配”问题传统的分销或代理模式&#xff0c;佣金计算、业…

ArcGIS大师之路500技---066DEM不进位保留一位小数

文章目录前言一、 问题描述二、 栅格计算器前言 本文介绍使用栅格计算器实现不进位保留一位小数。 一、 问题描述 样例DEM有多位小数&#xff0c;我们的目标是DEM只保留一位有效数字。 二、 栅格计算器 工具位置&#xff1a;系统工具箱—Spatial Analyst Tools—地图代数—…

从出题到成绩:在线笔试系统如何提升 HR 招聘效率?

在人才竞争白热化的当下&#xff0c;招聘效率与质量直接决定企业核心竞争力。传统线下笔试模式长期以来积累的诸多痛点&#xff0c;如组织成本高企、异地招聘受阻、公平性难以保障等&#xff0c;已成为 HR 部门高效选才的 “拦路虎”。数字化转型浪潮下&#xff0c;在线笔试系统…

考试云:在线答题系统,构建一体化赛事解决方案

在数字化转型的浪潮中&#xff0c;传统的纸质考试模式正逐渐被更加高效、便捷、公正的在线考试方式所取代。特别是在教育、企业培训、政府机关、职业认证等领域&#xff0c;如何借助信息化手段实现测评流程的智能化与标准化&#xff0c;已成为各行各业关注的重点。考试云在线考…

如何通过接近开关降低误停机成本

误停机是自动化产线中最隐蔽、也最昂贵的成本来源之一。很多时候&#xff0c;问题并不在于设备本身&#xff0c;而在于传感器误动作触发了保护逻辑。通过合理选型和布点设计&#xff0c;接近开关可以显著降低这种风险。例如&#xff0c;在关键位置采用抗干扰能力更强的型号&…

【AI】AI学习笔记:翻译langGraph 记忆概述(Memory)

记忆概述 记忆是一个能够记录先前交互信息的系统。对于AI智能体而言&#xff0c;记忆至关重要&#xff0c;它使智能体能够记住过去的交互、从反馈中学习并适应用户偏好。随着智能体处理愈发复杂且交互频繁的任务&#xff0c;这种能力对于提升效率和用户满意度都变得不可或缺。本…

什么是动态ip/ 什么情况下使用动态ip

动态住宅 IP 核心解析&#xff1a;跨境业务必备工具在网络应用及跨境业务中&#xff0c;代理 IP 应用广泛。动态住宅 IP 作为核心类型之一&#xff0c;需结合业务需求选择&#xff0c;以下为其核心解析。一、动态住宅 IP 是什么&#xff1f;动态住宅 IP&#xff08;轮换代理&am…

P8329 ZJOI2022 树 题解 / 容斥

题目传送门:P8329 ZJOI2022 树。 设 \(F(S)\) 表示第一棵树的叶子集合为 \(S\) 的方案数,\(G(T)\) 表示第二棵树的叶子集合为 \(T\) 的方案数。 那么答案即为 \(ans=\sum\limits_{S \cap T = \varnothing,S \cup T=\…

‌AI伦理测试框架:构建负责任软件的基石

一、为什么AI伦理测试不再是“可选项”&#xff0c;而是测试工程师的职责边界&#xff1f;‌ 传统软件测试关注“功能是否实现”&#xff0c;而AI系统测试必须追问&#xff1a;“它是否公平&#xff1f;”“它是否可问责&#xff1f;”“它是否在伤害边缘群体&#xff1f;” …

2026年 楼承板设备厂家推荐排行榜,钢承板/免浇筑/闭口/开口楼承板设备,十大楼承板成型机及压型设备实力品牌深度解析

2026年楼承板设备行业展望与实力品牌深度解析 随着建筑工业化与装配式建筑的深入推进,楼承板作为现代钢结构建筑体系中的关键构件,其生产设备——楼承板设备(亦称钢承板设备)的技术水平与市场格局正经历深刻变革。…

AI测试工具快速上手指南:从零到精通的实战教程

一、AI测试工具概述&#xff1a;为何成为测试从业者的必备技能 人工智能&#xff08;AI&#xff09;正重塑软件测试领域&#xff0c;通过自动化重复任务、提升测试覆盖率和减少维护成本&#xff0c;为测试工程师释放更多高阶分析空间。AI测试工具利用机器学习、自然语言处理等…

深度实践:从“手动排障”到“对话诊断”,构建基于 GenAI 的 K8s 智能运维平台

&#x1f680; 引言 在云原生架构迈向深水区的今天&#xff0c;管理大规模 Kubernetes&#xff08;如 Amazon EKS&#xff09;集群已不再是简单的“自动化”问题&#xff0c;而是“智能化”的博弈。当集群规模达到数百甚至上千时&#xff0c;工程师往往淹没在海量的日志和指标…

测试了一下,AI扒MIDI谱子的效率很离谱

https://madderscientist.github.io/noteDigger/ 我刚才测试了一首歌,基本上可以把导出的人声部分还原的差不多了,虽然还有不少错音,导出的MIDI修一修差不多就可以做完人声轨道了。 这种直接转换的效率,要比我边听…