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

Lua教程

Lua教程(简单易懂)-CSDN博客

博客相关解释:

5、循环

a = {"a", "b"}for i, v in ipairs(a) doprint(i, v)end 

 代码创建了一个名为 a 的数组,并使用 ipairs 迭代这个数组的元素。运行结果显示了每个元素的索引(下标)和对应的值。这是正确的输出结果:

1   a
2   b

在循环中,i 表示元素的索引,从1开始,递增,而 v 表示元素的值。所以,在每次迭代中, i 都会递增,而 v 包含了数组 a 中的对应元素。因此,输出显示了数组中每个元素的索引和值。

这种方式对于遍历数组并处理其中的元素非常有用,特别是当你需要按顺序访问数组中的数据时。

8、字符串

①string.gsub(mainString,findString,replaceString,num)

string.gsub 是Lua中的字符串处理函数,用于在字符串中查找并替换指定的子串。以下是该函数的参数和作用:

  • mainString: 这是要进行查找和替换操作的主字符串,即在这个字符串中查找 findString 并将其替换为 replaceString

  • findString: 这是要查找的子字符串。string.gsub 会在 mainString 中查找所有出现的 findString

  • replaceString: 这是要替换为的新字符串。当 findStringmainString 中被找到时,它将被替换为 replaceString

  • num (可选): 这是一个可选参数,表示要进行替换的次数。如果省略这个参数,所有匹配到的 findString 将都被替换。如果指定了 num,则只有前 num 次匹配到的 findString 会被替换。

string.gsub 函数会返回两个值,分别是:

  1. 一个新的字符串,是进行替换操作后的结果。
  2. 一个整数,表示替换操作的次数。

下面是一个示例,演示如何使用 string.gsub 函数:

local inputString = "Hello, world! Hello, Lua!"
local findString = "Hello"
local replaceString = "Hi"local result, count = string.gsub(inputString, findString, replaceString)print(result)  -- 输出 "Hi, world! Hi, Lua!"
print(count)   -- 输出 2,表示替换操作发生了2次

在这个示例中,我们将 "Hello" 替换为 "Hi",并且函数返回的 count 值为 2,表示 "Hello" 在字符串中出现了2次,都被替换为 "Hi"。 

②string.format("字符串")

string.format 是Lua中用于格式化字符串的函数。它的作用是将不同类型的数据转换为字符串,并按照指定的格式组合成一个新的字符串。通常,string.format 函数的第一个参数是格式化字符串,后面的参数是要插入到格式化字符串中的数据。

以下是使用 string.format 的基本语法:

formatted_string = string.format(format, arg1, arg2, ...)
  • format:这是一个包含格式占位符的字符串,用于指定如何格式化后续参数。占位符以 "%" 开头,后跟一个字符,表示要格式化的数据类型(例如,"%s" 表示字符串,"%d" 表示整数,"%f" 表示浮点数等)。

  • arg1, arg2, ...:这些是要格式化的数据,可以是一个或多个参数,根据 format 字符串中的占位符的数量和类型。

以下是一个示例,演示如何使用 string.format 格式化字符串:

local name = "Alice"
local age = 30
local height = 170.5local formatted = string.format("Name: %s, Age: %d, Height: %.2f", name, age, height)
print(formatted)

在这个示例中,string.format 函数将 name(字符串)、age(整数)、和 height(浮点数)格式化成一个字符串,其中 %s 用于字符串,%d 用于整数,%.2f 用于浮点数。结果将打印出格式化后的字符串。

这个函数在将数据以特定格式输出到字符串时非常有用,特别是在生成日志、报告或用户界面文本时。

③string.byte("字符串")/string.char(数值)

string.bytestring.char 是Lua中用于处理字符和字符编码的函数。

  1. string.byte("字符串"):

    • string.byte 用于获取字符串中指定位置的字符的ASCII码或Unicode码点值。
    • 当提供一个字符串作为参数时,它会返回该字符串的第一个字符的码点值。
    • 如果你想获取字符串中其他字符的码点值,你可以提供第二个可选参数,指定字符的位置。
    • 示例:
      local str = "Hello"
      local firstChar = string.byte(str) -- 获取第一个字符 "H" 的码点值
      print(firstChar) -- 输出 72​

       

 2.string.char(数值):

  • string.char 用于创建一个包含一个或多个字符的字符串,根据给定的ASCII码或Unicode码点值。
  • 你可以传递一个或多个整数作为参数,它将把这些整数转化为相应的字符并返回一个新的字符串。
  • 示例:
    local char1 = string.char(72) -- 创建一个包含 ASCII 码为 72 的字符的字符串
    local char2 = string.char(72, 101, 108, 108, 111) -- 创建包含多个字符的字符串
    print(char1) -- 输出 "H"
    print(char2) -- 输出 "Hello"
    

    这些函数对于字符编码和字符操作非常有用,允许你在字符串和数字之间进行转换,并创建包含特定字符的字符串。

 

10、迭代器

for k,v in pairs(t)print(k,v)
end

代码示例是一个在Lua中用于遍历一个表(table)的通用方法。它使用for循环结构和pairs函数来遍历表中的键和对应的值。以下是代码的解释:

  • for k, v in pairs(t):这是for循环的头部,它用于遍历表t的内容。kv是循环的控制变量,k用于表示键(key),v用于表示值(value)。

  • pairs(t):这是Lua的pairs函数,它用于获取表t中所有的键值对。pairs函数返回一个迭代器,可以用于遍历表。

  • do:这是for循环的开始,标志着循环体的开始。

  • print(k, v):这行代码是循环体,用于在每次迭代中输出键和值。k表示当前键,v表示当前值。

  • end:这是for循环的结束,标志着循环体的结束。

上述代码会遍历表t中的所有键值对,并将它们分别存储在kv中,然后使用print函数将它们输出到控制台。这是一种常见的方式,用于检查表中的数据、处理键值对或进行其他操作。

11、table相关 

②表的操作

table.concat(table,sep,start,end)

table.concat 是 Lua 中用于将表(table)中的元素连接成一个字符串的函数。它的参数和作用如下:

  • table:这是包含要连接的元素的表。
  • sep:这是一个可选的分隔符,用于在连接元素之间插入。如果省略该参数,元素将直接连接在一起。
  • start:这是可选的起始索引,指定从表的哪个位置开始连接元素。默认是1。
  • end:这是可选的结束索引,指定在表的哪个位置结束连接元素。默认是表的最后一个元素。

table.concat 函数会返回一个包含连接后的字符串的新字符串。

以下是一个示例,演示如何使用 table.concat 函数:

local fruits = {"apple", "banana", "cherry", "date"}
local result = table.concat(fruits, ", ", 2, 3)print(result)  -- 输出 "banana, cherry"

在这个示例中,我们有一个包含水果名称的表 fruits。我们使用 table.concat 函数来连接表中的元素,使用逗号和空格作为分隔符,并指定从第2个元素("banana")到第3个元素("cherry")进行连接。结果是 "banana, cherry"。如果不指定 sepstartend 参数,它将连接整个表中的所有元素。 

 

12、模块和包

require "<模块名>" 或require("<模块名>")

require 是 Lua 中用于加载模块的关键字。当你使用 require 语句时,你可以指定要加载的模块名称,并且 Lua 会尝试查找并加载相应的模块。通常,模块名称是一个字符串,通常包括模块的路径信息。

下面是一般形式的 require 语句:

require "<module_name>"
  • <module_name> 是要加载的模块的名称或路径。

模块可以是内置的Lua库,也可以是自定义的Lua文件,你可以使用 require 语句将其导入到你的Lua脚本中以使用其中定义的函数、变量和功能。要成功使用 require,需要确保模块所在的路径在Lua的模块搜索路径中,或者提供完整的路径。这通常需要模块以.lua文件的形式存在,并且可以通过相对或绝对路径引用。

以下是一个示例:

-- 加载Lua标准库中的math模块
local math_module = require "math"-- 使用math模块中的函数
local sqrt_value = math_module.sqrt(25)
print(sqrt_value)  -- 输出 5

 在这个示例中,require "math" 加载了Lua标准库中的math模块,然后我们使用math_module来调用模块中的sqrt函数来计算平方根。

 

相关文章:

Lua教程

Lua教程(简单易懂)-CSDN博客 博客相关解释&#xff1a; 5、循环 a {"a", "b"}for i, v in ipairs(a) doprint(i, v)end 代码创建了一个名为 a 的数组&#xff0c;并使用 ipairs 迭代这个数组的元素。运行结果显示了每个元素的索引&#xff08;下标&am…...

《Node.js+Express+MongoDB+Vue.js全栈开发实战》简介

今天介绍的这本书是《Node.jsExpressMongoDBVue.js全栈开发实战》。该书由清华大学出版社于2023年1月出版 外观 从书名故名思议&#xff0c;就是基于Node.jsExpressMongoDBVue.js来实现企业级应用全栈开发。 封面风格比较简约&#xff0c;插图是一张类似于罗马时代战车形象&…...

多输入多输出 | MATLAB实现CNN-BiGRU-Attention卷积神经网络-双向门控循环单元结合SE注意力机制的多输入多输出预测

多输入多输出 | MATLAB实现CNN-BiGRU-Attention卷积神经网络-双向门控循环单元结合SE注意力机制的多输入多输出预测 目录 多输入多输出 | MATLAB实现CNN-BiGRU-Attention卷积神经网络-双向门控循环单元结合SE注意力机制的多输入多输出预测预测效果基本介绍程序设计往期精彩参考…...

阿里云r7服务器内存型CPU采用

阿里云服务器ECS内存型r7实例是第七代内存型实例规格族&#xff0c;CPU采用第三代Intel Xeon可扩展处理器&#xff08;Ice Lake&#xff09;&#xff0c;基频2.7 GHz&#xff0c;全核睿频3.5 GHz&#xff0c;计算性能稳定&#xff0c;CPU内存比1:8&#xff0c;2核16G起步&#…...

Godot2D角色导航-自动寻路教程(Godot设置导航代理的目标位置)

文章目录 创建导航NavigationAgent2D节点设置目标位置其他文章 创建导航 首先&#xff0c;创建一个基本的场景&#xff0c;下面的文章讲解了如何创建一个基本的导航场景&#xff0c;点击如下链接前往该文章&#xff1a; Godot2D角色导航-自动寻路教程 NavigationAgent2D节点 …...

R语言实现向量自回归和误差修正模型——附实战代码

大家好&#xff0c;我是带我去滑雪&#xff01; 向量自回归&#xff08;VAR&#xff09;模型和误差修正模型&#xff08;ECM&#xff09;是时间序列分析中常用的两种模型&#xff0c;它们用于研究多个变量之间的动态关系。VAR 模型适用于研究多个相关变量之间的相互影响和动态关…...

原理:用UE5制作一个2D游戏

选中资产图片右键--Sprite Actions--Apply Paper2D Texture Settings 制作场景 把它丢到场景里&#xff0c;并把坐标归零 创建图块集tileset 打开新建的tile set&#xff0c;根据最小图块设置最小尺寸单元 选择需要的图块单元&#xff0c;add box 对新建的tile set右键创建til…...

【ARM 嵌入式 编译系列 11.3 -- GCC attribute packed noreturn constructor 介绍】

文章目录 GCC 的 __attribute__ 是一个编译器扩展特性,允许开发者在源代码中设置函数属性(function attributes)、变量属性(variable attributes)和类型属性(type attributes)。这些属性可以影响函数、变量或类型的行为。 以下是一些常见的 __attribute__ 属性: __at…...

主从Reactor高并发服务器

文章目录 Reactor模型的典型分类单Reactor单线程单Reactor多线程多Reactor多线程本项目中实现的主从Reactor One Thread One Loop各模型的优点与缺点 项目分解Reactor服务器模块BufferSocketChannelEpollerTimerWheelEventLoopAnyConnectionAcceptorLoopThreadLoopThreadPoolTc…...

文心一言Plugin实战来了,测试开发旅游攻略助手

刚刚过去的8月&#xff0c;百度WAVE SUMMIT 深度学习开发者大会上&#xff0c;重磅发布文心一言的五个原生插件&#xff1a;百度搜索、览卷文档&#xff08;基于文档的交互&#xff09;、E 言易图&#xff08;数据洞察图表生成&#xff09;、说图解画&#xff08;基于图片的交互…...

微服务13-Seata的四种分布式事务模式

文章目录 XA模式实现XA模式 AT模式AT模式的脏写问题&#xff08;对同数据并发写的问题&#xff09;其他事务不获取全局锁的一个情况&#xff08;AT模式写隔离的实现&#xff09;实现AT模式 TCC模式TCC实现我们怎么样去判断是否空回滚和业务悬挂&#xff1f;业务分析 Saga模式总…...

C结构体内定义结构体,不能直接赋值。

现像&#xff1a; 如下代码&#xff1a; 头文件&#xff1a; typedef struct aBlinkGpioPinOutAbst_{void (*initAsOutput)(void);void (*high)(void);void (*low)(void); }aBlinkGpioPinOutAbst;typedef struct aBlinkGpioAbst_{ #if GPIO_CONFIG_PA0 GPIO_CONFIG_AS_OUTPU…...

PHP遇见错误了看不懂?这些错误提示你必须搞懂

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 一、错误分类二、系统错误&#xff1a;2.1 编译错误2.2 致命错误2.3 警告错误2.4 通知错误 三、用户错误3.1 错…...

微信小程序备案流程操作详解

1、2023年9月1号小程序开始必须备案了,各位小程序商城只需要按流程自主去微信小程序后台操作即可; 2、对未上架的微信小程序,从2023年9月1号开始需先备案才能上架; 3、对存量已上架的小程序,需在2024年3月31号前完成备案即可。逾期未完成备案,平台将按照备案相关规定于…...

【100天精通Python】Day70:Python可视化_绘制不同类型的雷达图,示例+代码

目录 1. 基本雷达图 2. 多组数据的雷达图 3 交互式雷达地图 4 动态雷达图 0 雷达图概述 雷达图&#xff08;Radar Chart&#xff09;&#xff0c;也被称为蜘蛛图&#xff08;Spider Chart&#xff09;或星型图&#xff0c;是一种用于可视化多维数据的图表类型。雷达图通常由…...

KY258 日期累加

KY258 日期累加 int main() {int n 0; //样例个数cin >> n;//for循环处理n个样例for (int i 0; i < n; i){int y, m, d, num;int days[12] { 31,28,31,30,31,30,31,31,30,31,30,31 };//输入年月日 要加的天数cin >> y >> m >> d >>…...

基于CodeFormer实现图片模糊变清晰,去除马赛克等效果

前言 CodeFormer是一种基于AI技术深度学习的人脸复原模型&#xff0c;由南洋理工大学和商汤科技联合研究中心联合开发。该模型通过结合了VQGAN和Transformer等技术&#xff0c;可以通过提供模糊或马赛克图像来生成清晰的原始图像。可以实现老照片修复、照片马赛克修复、黑白照…...

Docker【部署 05】docker使用tensorflow-gpu安装及调用GPU踩坑记录

tensorflow-gpu安装及调用GPU踩坑记录 1.安装tensorflow-gpu2.Docker使用GPU2.1 Could not find cuda drivers2.2 was unable to find libcuda.so DSO2.3 Could not find TensorRT&&Cannot dlopen some GPU libraries2.4 Could not create cudnn handle: CUDNN_STATUS_…...

前后端分离中,前端请求和后端接收请求格式总结

get请求可以携带的参数 1&#xff09;前端&#xff1a;传统键值对(http:xx?a1&b1) <--> 后端&#xff1a;RequestParam("a") int a , RequestParam("b") int b 2&#xff09;前端&#xff1a;(http:xx/a/b) <--> 后端&#xff1a;Reque…...

pytorch的基本运算,是不是共享了内存,有没有维度变化

可以把PyTorch简单看成是Python的深度学习第三方库&#xff0c;在PyTorch中定义了适用于深度学习的基本数据结构——张量&#xff0c;以及张量的各类计算。其实也就相当于NumPy中定义的Array和对应的科学计算方法&#xff0c;正是这些基本数据类型和对应的方法函数&#xff0c;…...

10分钟搞定 Nginx 安装:Linux/Windows 双平台实测(附避坑指南)

一、前言上一篇我们初识了Nginx——知道了它是高性能的HTTP和反向代理服务器&#xff0c;懂了它为什么被99%的互联网公司青睐&#xff0c;也明确了我们后续的学习路线。本篇文章将手把手教你在Linux和Windows系统上&#xff0c;完成Nginx的安装、部署、启动、停止 &#xff0c;…...

告别兼容性问题:手把手教你用canvas和base64转换TIFF图片

前端工程师必备&#xff1a;TIFF图片处理全攻略与实战解决方案 在当今数字内容爆炸式增长的时代&#xff0c;图片处理已成为前端开发中不可或缺的一环。作为专业开发者&#xff0c;我们经常需要面对各种图片格式的兼容性问题&#xff0c;其中TIFF&#xff08;Tagged Image Fil…...

OpenAirInterface (OAI) 实战:如何用USRP搭建你的第一个5G仿真环境(附避坑指南)

OpenAirInterface (OAI) 实战&#xff1a;如何用USRP搭建你的第一个5G仿真环境&#xff08;附避坑指南&#xff09; 当5G技术从实验室走向商业化时&#xff0c;开源软件无线电平台OpenAirInterface&#xff08;OAI&#xff09;正成为开发者验证创新想法的关键工具。不同于商业设…...

Layerdivider:零基础上手图像分层工具的完整指南

Layerdivider&#xff1a;零基础上手图像分层工具的完整指南 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 为什么自动分层总是不尽如人意&#xff1f;设…...

usearch的内存泄漏自动化测试:在CI中集成泄漏检测

usearch的内存泄漏自动化测试&#xff1a;在CI中集成泄漏检测 【免费下载链接】usearch Fastest Open-Source Search & Clustering engine for Vectors & &#x1f51c; Strings in C, C, Python, JavaScript, Rust, Java, Objective-C, Swift, C#, GoLang, and Wolf…...

抖音批量下载终极指南:3分钟掌握高效无水印下载技巧

抖音批量下载终极指南&#xff1a;3分钟掌握高效无水印下载技巧 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

stealth.js全解析:40+反检测补丁的配置与优化技巧

Stealth.js全解析&#xff1a;40反检测补丁的配置与优化技巧 在当今的Web自动化领域&#xff0c;反检测技术已成为开发者必须掌握的核心技能之一。无论是数据采集、自动化测试还是其他需要模拟真实用户行为的场景&#xff0c;如何让脚本"隐形"都是决定成败的关键因素…...

Windows记事本CVE-2026-20841漏洞分析:从命令注入根因、全链路攻击链到企业级纵深防御的全维度深度复盘

在Windows系统的生态里&#xff0c;从来没有一款工具能像记事本一样&#xff0c;拥有长达40年的“绝对安全”共识。 从1985年Windows 1.0首次预装&#xff0c;到如今Windows 11的全版本覆盖&#xff0c;这个仅数百KB的纯文本编辑器&#xff0c;始终是全球用户记录备忘、清理格…...

运放跟随器:电路设计中最容易被低估的‘保镖‘(隔离驱动全解析)

运放跟随器&#xff1a;电路设计中最容易被低估的"保镖"&#xff08;隔离&驱动全解析&#xff09; 在硬件工程师的日常设计中&#xff0c;运放跟随器常常被视为一个"可有可无"的组件——毕竟它的电压增益仅为1&#xff0c;看起来似乎只是将输入信号原封…...

Janus-Pro-7B入门编程教学:从零开始学习C语言文件读写操作

Janus-Pro-7B入门编程教学&#xff1a;从零开始学习C语言文件读写操作 你是不是刚开始学C语言&#xff0c;一看到文件操作就觉得头大&#xff1f;fopen、fwrite、fread这些函数名字看着就复杂&#xff0c;更别提什么文件指针、缓冲区这些概念了。别担心&#xff0c;这感觉我懂…...