当前位置: 首页 > news >正文

工程师了解的Lua语言

1、关于lua语言

        lua语言是用于嵌入式领域当中的一门脚本语言,其实在大学期间,我也没有接触过这门语言,但是在未来的发展之路当中,需要用到这门语言,所以在我的知识库当中添加这门语言知识是必要而且重要的,但是对于有基础的同学来说,学习一门语言其实大概思路都是差不多的,我们需要知道这门语言的基本数据类型,语法,循环结构,条件判断结构,那么这些基本了解的东西就了解得差不多了,相比其他语言来说,lua语言相比较简单,如果已经有了其他语言的概念和知识之后,学习这门语言来说相对比较容易。

2、lua语言的数据类型

        lua语言的数据类型的话,和其他语言都是差不多的,相信大多数人都学习过c语言这门编程语言,那么在lua语言当中呢,也有相同的数据类型,Lua 有 8 种基本数据类型:nilbooleannumberstringfunctionuserdatathreadtable

  • 变量可以存储任意一种类型的值

        学习一门语言,就是和其他语言进行对比学习,这样理解起来很容易,反正都是编程语言,大体逻辑基本一致。

        lua语言当中的布尔类型和c语言当中一致,就是ture ,false,相信大部分都能理解

        数值类型,拿c语言来说,分为整型int,浮点型float,浮点又分为单精度和双精度double,在lua语言当中,没有细分那么多,总的数值类型就一个,数值型(number)为什么和c语言的不一样呢,这是因为在lua语言当中,我们申请变量的时候,申请的变量会根据赋予的值类型默认当前值的类型,不像c语言当中一样,需要自己定义数据类型,并且这里面的数据类型转换也是一样的,会根据赋予的值转换数据类型,但是和c语言当中一样,字符型的数据类型,不能转换为数值型,否则会报错

        对于空类型来说,在c语言当中是null代表空指针,大多数情况下都是指针没有指向任何实际地址的表示,但是在lua当中,nil是指空,也就是没有的意思,通常用在表当中,在表当中表示不存在的键和已经删除的键。

3、lua语言的变量

        在c语言当中呢,我们定义一个变量需要给变量定义数据类型,但是在lua当中呢,我们定义变量的时候就不需要,在lua当中会自动根据赋予的值类型来给变量指定数据类型,那么在我们实际的操作过程当中,只需要用一个local来表示这是一个局部变量就可以了,当然有人可能会有疑问,如果说我的local表示的这个局部变量是没有作用域来包含的,那么这个局部变量和全局变量没有什么区别啊,这种变量是全局变量还是局部变量呢,看下面这个代码

-- 文件 test.lua
local x = 10  -- 文件级局部变量function foo()print(x)  -- 可以访问 x
endfoo()  --> 10
print(x)  --> 10

上面这个代码当中呢  x=10是一个没有作用域包含的局部变量,就是我上面说的那种情况,但是你仔细思考,这个局部变量的作用域是不是代码开始到代码结束呢,那么这个的作用域是不是和全局变量一样了,哈哈哈。如果你有困惑,那么我直接解答了,如果说用local的变量,那么这个变量就是一个局部变量,只不过上面代码当中的这个变量是一个特殊情况,只是作用域和全局变量一样,但是还是局部变量,相对于全局变量,这种作用域是整个文件的局部变量是不能被其他文件所访问的,而全局变量能够被其他文件访问使用。 

4、lua语言的循环

        在c语言当中我们循环,for,while,do--while,在lua语言当中也有三个循环,分别是for,while,repeat--until, 这里就必须要注意了,两种语言在编写这种语言的风格不太一样,所以相对于学习的过程来说会有一些不太一样。

        lua当中的for循环有两种形式,一种是数值型for循环,一种是泛型for循环,下面举两个例子

1、数值型for循环

for i = 1, 5 doprint(i)
end

用途:数值型for循环主要是用于我们来进行数值循环的时候用的,结构如下:

for 变量 = 初始值, 结束值, 步长 do-- 循环体
end

        在这种结构下,初始化是赋予变量开始循环的初始值,结束值是当初始值开始慢慢相加的时候,会判断初始值<=结束值,如果说比较结果为false,那么循环结束

2、泛型for循环

local t = {10, 20, 30}
for i, v in ipairs(t) doprint(i, v)
end

         用途:主要是用于在表的遍历和数组这些数据结构的

        结构如下:

for 变量1, 变量2, ... in 迭代器 do-- 循环体
end

        在上面这个代码当中,迭代器一般使用ipairs或者pairs

lua里面的while循环

local i = 1
while i <= 5 doprint(i)i = i + 1
end

 lua里面的repeat- until循环

local i = 1
repeatprint(i)i = i + 1
until i > 5

相关文章:

工程师了解的Lua语言

1、关于lua语言 lua语言是用于嵌入式领域当中的一门脚本语言&#xff0c;其实在大学期间&#xff0c;我也没有接触过这门语言&#xff0c;但是在未来的发展之路当中&#xff0c;需要用到这门语言&#xff0c;所以在我的知识库当中添加这门语言知识是必要而且重要的&#xff0c;…...

著名的软件都用什么语言编写?

你是否曾经好奇&#xff0c;身边那些耳熟能详的软件&#xff0c;它们究竟是用什么语言编写的&#xff1f;从操作系统到浏览器、从数据库到编程工具&#xff0c;每一款软件背后都承载着开发者们的智慧与技术选型。那么&#xff0c;究竟哪些编程语言成就了这些世界级的软件呢&…...

设计模式 结构型 代理模式(Proxy Pattern)与 常见技术框架应用 解析

代理模式&#xff08;Proxy Pattern&#xff09;是一种常见的设计模式&#xff0c;在软件开发中有着广泛的应用。其核心思想是通过创建一个代理类来控制对另一个对象的访问&#xff0c;从而实现对目标对象功能的扩展、保护或其他附加操作。 一、核心思想 代理模式的核心思想在…...

Linux环境(CentOs7) 安装 Node环境

Linux环境&#xff08;CentOs7&#xff09; 安装 Node环境 使用NodeSource安装Node.js 1、清除缓存&#xff08;可选但推荐&#xff09; sudo yum clean all2、添加NodeSource仓库&#xff0c;根据你想要安装的Node.js版本&#xff0c;选择相应的NodeSource安装脚本。例如&am…...

Tailwind CSS 实战:现代登录注册页面开发

在前端开发中&#xff0c;登录注册页面是最常见的需求之一。一个设计精美、交互友好的登录注册页面不仅能提升用户体验&#xff0c;还能增加产品的专业度。本文将详细介绍如何使用 Tailwind CSS 开发一个现代化的登录注册页面。 设计思路 在开始编码之前&#xff0c;我们先明…...

Unity2022接入Google广告与支付SDK、导出工程到Android Studio使用JDK17进行打包完整流程与过程中的相关错误及处理经验总结

注&#xff1a;因为本人也是第一次接入广告与支付SDK相关的操作&#xff0c;网上也查了很多教程&#xff0c;很多也都是只言片语或者缺少一些关键步骤的说明&#xff0c;导致本人也是花了很多时间与精力踩了很多的坑才搞定&#xff0c;发出来也是希望能帮助到其他人在遇到相似问…...

反向传播算法的偏置更新步骤

偏置的更新步骤 假设我们有一个三层神经网络&#xff08;输入层、隐藏层和输出层&#xff09;&#xff0c;并且每层的激活函数为 sigmoid 函数。我们需要更新隐藏层和输出层的偏置。以下是详细的步骤&#xff1a; 1. 计算误差项&#xff08;Error Term&#xff09; 输出层的…...

条款47:请使用 traits classes 表现类型信息(Use traits classes for information about types)

条款47&#xff1a;请使用 traits classes 表现类型信息 1.1 提出问题 想一想&#xff0c;下面的功能如何实现&#xff1f;&#xff08;可以查看std::advance源码&#xff09; template<typename IterT, typename DistT> void advance(IterT& iter, DistT d); /…...

yolov5和yolov8的区别

1. yolov5有建议框&#xff0c;yolov8没有建议框 2. yolov5标签中有自信度&#xff0c;而yolov8没有自信度。因为自信度是建议框和真实框的交集 3. yolov5有三个损失函数&#xff0c;回归问题&#xff1a;预测框和建议框的损失(中心点宽高偏移量的损失)&#xff1a;CIOUFocal…...

Redis 实现分布式锁

文章目录 引言一、Redis的两种原子操作1.1 Redis 的原子性1.2 单命令1.3 Lua 脚本1.4 对比单命令与 Lua 脚本 二、Redis 实现分布式锁2.1 分布式锁的概念与需求2.1.1 什么是分布式锁&#xff1f;2.1.2 分布式锁的常见应用场景 2.2 基于 Redis 的分布式锁实现2.2.1 锁的获取与释…...

django StreamingHttpResponse fetchEventSource实现前后端流试返回数据并接收数据的完整详细过程

django后端环境介绍&#xff1a; Python 3.10.14 pip install django-cors-headers4.4.0 Django5.0.6 django-cors-headers4.4.0 djangorestframework3.15.2 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 总环境如下&#xff1a; Package Version -…...

SpringSpringBoot常用注解总结

目录 1. SpringBootApplication 2. Spring Bean 相关 2.1. Autowired 2.2. Component,Repository,Service, Controller 2.3. RestController 2.4. Scope 2.5. Configuration 3. 处理常见的 HTTP 请求类型 3.1. GET 请求 3.2. POST 请求 3.3. PUT 请求 3.4. DELETE 请…...

24.小R的随机播放顺序<字节青训营-中等题>

1.题目 问题描述 小R有一个特殊的随机播放规则。他首先播放歌单中的第一首歌&#xff0c;播放后将其从歌单中移除。如果歌单中还有歌曲&#xff0c;则会将当前第一首歌移到最后一首。这个过程会一直重复&#xff0c;直到歌单中没有任何歌曲。 例如&#xff0c;给定歌单 [5, …...

【QT】增删改查 XML 文件的类

使用单例类模板实现的对XML文件的节点、属性、文本进行增删改查,可以直接用! 直接POST代码,比较简单好用。 针对以下格式的xml文件比较适用 每个节点的名称都不一样,节点包含了各种属性。 <?xml version="1.0" encoding="UTF-8"?> <config…...

Linux-掉电保护方案

参考链接 https://blog.csdn.net/pwl999/article/details/109411919硬件设计 设备树 驱动程序 #include <linux/module.h> #include <linux/init.h> #include <linux/interrupt.h> #include <linux/gpio.h>int irq;//中断服务函数 irqreturn_t tes…...

php获取字符串中的汉字

在PHP中&#xff0c;可以使用正则表达式来提取字符串中的汉字。汉字通常位于Unicode范围\u4e00-\u9fa5之内&#xff0c;因此可以使用preg_match_all函数配合适当的正则表达式来实现。 以下是一个PHP代码示例&#xff0c;它会从给定的字符串中提取出所有的汉字&#xff1a; fu…...

java: JDK isn‘t specified for module ‘product-service‘问题解决

目录 问题 解决方法 1.打开File->Project Structure... 2.将Project SDK修改为17 Oracle OpenJDK 17.0.12&#xff0c;并Apply&#xff0c;OK 问题 添加module后报错&#xff1a;java: JDK isnt specified for module product-service 查看pom.xml文件也添加了对应的JDK…...

使用工厂+策略模式实现去除繁琐的if else

使用工厂策略模式实现去除繁琐的if else 在中间有一个mapstruct的bug&#xff0c;即在修改实体类中的类型时&#xff0c;或者修改属性名字&#xff0c;mapstruct都无法进行转换&#xff0c;会报错&#xff0c;此时需要maven cleanmaven compile即可 前言 在这次的开发中&#…...

Dubbo3入门项目搭建

开发环境&#xff1a;jdk8、dubbo3.2.9、nacos2.3.0、springboot2.7.17、dubbo-admin0.6.0。 Dubbo 是一个高性能的 Java RPC&#xff08;远程调用&#xff09;框架&#xff0c;最初由阿里巴巴开发并开源&#xff0c;主要用于构建 SOA 架构下的分布式应用系统( soa简单理解就是…...

形象地理解UE4中的数据结构 TLinkedListBase

大家都熟知链表&#xff0c;但不一定能快速看懂UE4中的数据结构。 TLinkedListBase表示“链接”中的一个结点&#xff0c;有三个成员&#xff1a; 一、ElementType Element; 表示具体的业务&#xff0c;例如int链条中的一个整数。 二、NextLink 表示 “下一个Node”&#…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

Python的__call__ 方法

在 Python 中&#xff0c;__call__ 是一个特殊的魔术方法&#xff08;magic method&#xff09;&#xff0c;它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时&#xff08;例如 obj()&#xff09;&#xff0c;Python 会自动调用该对象的 __call__ 方法…...

Qt Quick Controls模块功能及架构

Qt Quick Controls是Qt Quick的一个附加模块&#xff0c;提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中&#xff0c;这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构&#xff0c;与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...

Linux入门(十五)安装java安装tomcat安装dotnet安装mysql

安装java yum install java-17-openjdk-devel查找安装地址 update-alternatives --config java设置环境变量 vi /etc/profile #在文档后面追加 JAVA_HOME"通过查找安装地址命令显示的路径" #注意一定要加$PATH不然路径就只剩下新加的路径了&#xff0c;系统很多命…...