0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Lua基础语法更新篇(上)

合宙LuatOS 来源:合宙LuatOS 作者:合宙LuatOS 2026-01-23 19:56 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

初识 Lua

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

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

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


一、第一个 Lua 程序

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

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

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

wKgZPGlzP4mAcd37AAAnMnHNYbQ181.png

二、输出数据

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

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

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

wKgZPGlzVByAXAlWAABuog3rEbU546.png

三、代码注释

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

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

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

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

下面是注释的例子:

wKgZPGlzVNOARiJtAAC2JSZ3eW0171.png

四、变量

4.1 number变量

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

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

wKgZPGlzVV-AMFH3AAAgtmgTBdM433.png


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

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

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

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

wKgZPGlzVfWAL2UuAACAnP1u3H4082.png

4.2 了解nil

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

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

wKgZO2lzVlmAPcw8AABEhM1iCDQ216.png

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

wKgZO2lzVoWAe1PQAABHTwLaCbE727.png

4.3 赋值语句

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

如下面一样,使用等号对左边的变量进行赋值

wKgZO2lzVrOAfzyQAAA6E7ruPas109.png

Lua可以对多个变量同时赋值,变量用逗号分开,赋值语句右边的值会依次赋给左边的变量。

wKgZO2lzVuKABI5zAAAlulEdago934.png

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

  • 变量个数 > 值的个数:按变量个数补足nil
  • 变量个数 < 值的个数:多余的值会被忽略

下面的例子可以展示这种设定:

wKgZPGlzVxiAPnqHAADARvggYq0866.png

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

wKgZO2lzVzyANcj9AABWPDQqH58219.png

4.4 交换变量

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

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

wKgZO2lzV2uAOp9GAACY3y-OOiw402.png

4.5 输出变量

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

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

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

wKgZPGlzV5qAb3xYAABdKmnDvdo215.png

4.6 算数运算符

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

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

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

wKgZPGlzV_OAZo9IAACRxrAir1A228.png

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

wKgZPGlzWBeAKoOFAAFTGBT-j7s173.png

你需要完成下面的任务:

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

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

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

wKgZO2lzWD2AbRM7AABZqMyVAUc672.png

六、字符串

6.1 string类型变量

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

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

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

1. 单引号间的一串字符

2. 双引号间的一串字符

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

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

wKgZO2lzWPCACEnnAAE-WpYUD1I228.png

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

新建三个变量s1、s2、s3

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

wKgZPGlzWSiAMRTHAACQpC4Yk-Q662.png

6.2 转义字符

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

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

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

wKgZO2lzWViAfdoRAAAZ6V07YBQ626.png

同理,输出双引号时,声明字符串用单引号括起来,像下面这样

wKgZPGlzWYCARzy8AAAZs2z_174651.png

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

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

以开头的都是转义字符,下面时常用的转义字符格式:

wKgZO2lzWaqAGs9_AABdCJqUw-M656.png

例如,如果我们想给str赋值一个单引号,一个双引号('"),那么我们可以这样写:

wKgZO2lzWc2AGY1yAAAchH8OM0k566.png

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

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

abcd"ef'gh]]

并打印出来

wKgZO2lzWfOAOTr3AABYFKW2AsI928.png

6.3 string拼接

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

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

wKgZO2lzWiGAdmFBAABhoo5Kv48353.png


下面你要完成这个任务:

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

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

wKgZO2lzWkiAc0uQAABYLSgI41g169.png

6.4 number转string

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

比如下面的变量n和s,如何拼接起来呢?

wKgZPGlzWn2ARWLiAAAk0uB75hg834.png

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

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

wKgZPGlzWqKAfZJHAABVVmHzUzM285.png

下面你要完成这个任务:

已知三个变量n1、s、n2

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

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

wKgZPGlzWs2AGnabAABYG2Mw_GE462.png

6.5 string转number

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

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

wKgZO2lzW_uAIXqjAAAmM_iGtWs362.png


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

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

wKgZPGlzXByAGrUlAABVBXPUR-A522.png

下面你要完成这个任务:

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

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

wKgZO2lzXD-AV4o5AABajgBmGBU681.png

七、逻辑运算

7.1 布尔型和比较运算

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

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

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

wKgZO2lzXImAGEeZAAB_IPFo6m4260.png

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

wKgZO2lzXKaAMJTwAADUKyCgbCA985.png

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

wKgZPGlzXMWAPdruAAB2WRbXyrY826.png

7.2 逻辑运算符

逻辑运算符基于布尔型的值来进行计算,并给出结果,下表列出了 Lua 语言中的常用逻辑运算符:

wKgZO2lzXPWAZGNnAABBhWm7J7s770.png

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

wKgZO2lzXReAW0UAAAE4xtUOkIw714.png

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

wKgZPGlzXTyASNFeAACMRp0Q4-8392.png

7.3 检验大小(自测题)

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

3

以下四行判断代码,正确的是?

(返回true即表示变量n符合要求)

wKgZO2lzXW2AXyaEAACD_mS2Wpg869.png

八、分支判断

8.1 条件判断

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

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

wKgZO2lzXamAF5-mAABOPQkKCQI016.png

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

wKgZO2lzXeyADAwcAABIt4Gspv0771.png


下面是你需要完成的事:

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

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

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

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

wKgZPGlzXhWALe9vAADElZ2d3cM423.png

8.2 多条件判断

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

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

wKgZPGlzXj-AXTTMAACmWQbxywM049.png

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

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

那么代码就像如下这样:

wKgZO2lzXnOANMNkAADGBDMh1E4360.png

注意:else和elseif都是可选的,可有可无,但是end不能省略

下面是你需要完成的事:

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

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

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

wKgZO2lzXpyABlu4AADMeJiGQfo303.png

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

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

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

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

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

如果不可以,就打印false

wKgZPGlzXsyAaPIcAABVJ3Yh2IU601.png

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

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

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

wKgZPGlzXvmAH-TMAADYHOaC_d0771.png

下篇继续介绍哦~


审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 语法
    +关注

    关注

    0

    文章

    45

    浏览量

    10683
  • Lua
    Lua
    +关注

    关注

    0

    文章

    90

    浏览量

    11507
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C++与lua联合编程

    核心课》中对“Lua 栈机制”的深度剖析,绝不仅是一次枯燥的源码阅读,而是一套关于“跨系统交易成本最小化”与“算力资产精准重组”的底层方法论。彻底搞懂 Lua 栈,本质就是掌握了在 C++ 与
    发表于 04-19 16:27

    警惕兼容性陷阱:LuatOS-Air脚本在LuatOS中的运行异常分析

    即使语法正确的LuatOS-Air脚本,在LuatOS环境中也可能出现“静默失败”——程序无报错但功能未执行。这类问题多与系统事件循环、模块加载时机或硬件抽象层调用方式有关。本文通过多个真实
    的头像 发表于 01-13 19:20 282次阅读
    警惕兼容性陷阱:LuatOS-Air脚本在LuatOS中的运行异常分析

    BTS50007-1LUA:高性能12V智能高端功率开关的深度解析

    BTS50007-1LUA:高性能12V智能高端功率开关的深度解析 在电子设备的设计中,功率开关的性能和可靠性对整个系统的稳定性起着至关重要的作用。今天,我们要深入探讨的是英飞凌(Infineon
    的头像 发表于 12-20 09:30 812次阅读

    探索BTH50015 - 1LUA:高效智能高侧功率开关的技术剖析

    探索BTH50015 - 1LUA:高效智能高侧功率开关的技术剖析 在电子工程师的日常设计工作中,选择合适的功率开关至关重要。今天,我们就来深入剖析一款名为BTH50015 - 1LUA的Power
    的头像 发表于 12-18 17:30 687次阅读

    LUA例程-常用的回调函数使用说明

    详细说明LUA脚本函数功能和对应的应用实例。对于LUA脚本编程有很大的帮助和提高技能。
    发表于 11-24 16:43 0次下载

    语法纠错和testbench的自动生成

    在编写Verilog代码时,我一般都是先在编辑器写完,因为编辑器vscode或者notepad++可以提供语法高亮和自动补全等功能,然后用仿真器跑仿真,但是在编写过程中不可避免的会有一些语法的错误
    发表于 10-27 07:07

    大彩讲堂:VisualHMI-LUA教程-获取和设置16位数据函数

    一、适合范围本文档适用于VisualHMI平台,Lua脚本语言为V5.3版本,配合工程可以完成大部分的内部逻辑处理。二、概述2.1get_uint16(vtype,addr)读取无符号短整型寄存器
    的头像 发表于 10-13 16:40 1471次阅读
    大彩讲堂:VisualHMI-<b class='flag-5'>LUA</b>教程-获取和设置16位数据函数

    程序编译运行正常但是显示语法错误,为什么?

    样例程序:can_sample.c rtconfig.h里启用了#define RT_CAN_USING_HDR 代码从图中这里开始大段标识语法错误: 跳转到宏
    发表于 09-25 06:27

    如何更新 NuMaker IoT 板的 Wi-Fi 模块固件?

    更新 NuMaker IoT 板的 Wi-Fi 模块固件
    发表于 09-04 08:28

    请问如何通过 PinView 和 lua 脚本检查和修改寄存器状态?

    如何通过 PinView 和 lua 脚本检查和修改寄存器状态?
    发表于 08-28 07:57

    如何通过 PinView 和 lua 脚本检查和修改寄存器状态?

    如何通过 PinView 和 lua 脚本检查和修改寄存器状态?
    发表于 08-25 06:59

    零基础学习LuatOS编程:快速上手开发实战教程!

    到实践的跨越。 学习LuatOS的主要方法之一是“运行各个功能模块的demo代码”,本期特别分享——LuatOS编程起步相关内容。   注意:本文档的读者,默认都已经了解初步的Lua语法。   如果不懂Lua
    的头像 发表于 06-13 17:27 733次阅读
    零基础学习LuatOS编程:快速上手开发实战教程!

    LuatOS编程基础教程:手把手带你入门物联网开发!

    设备开发之旅。 学习LuatOS的主要方法之一是“运行各个功能模块的demo代码”,本期特别分享——LuatOS编程起步相关内容。   注意:本文档的读者,默认都已经了解初步的Lua语法。   如果
    的头像 发表于 06-11 13:03 844次阅读
    LuatOS编程基础教程:手把手带你入门物联网开发!

    揭秘:硬件圈的光通信密码——Lua+LED!

    Lua的轻快语法遇上LED的物理脉冲,竟能生成物联网设备的社交指纹!通过定义不同的闪烁协议(如Morse光码、RGB情绪谱),开发者们正在用光信号构建硬件间的非语言社交网络——这是智能设备独有
    的头像 发表于 05-15 14:29 623次阅读
    揭秘:硬件圈的光通信密码——<b class='flag-5'>Lua</b>+LED!

    harmony OS NEXT-双向数据绑定MVVM以及$$语法糖介绍

    # 鸿蒙Harmony-双向数据绑定MVVM以及$$语法糖介绍 ## 1.1 双向数据绑定概念 在鸿蒙(HarmonyOS)应用开发中,双向数据改变(或双向数据绑定)是一种让数据·模型和UI组件之间
    的头像 发表于 04-29 16:52 1337次阅读