Lua学习(二)
Lua基础学习
- 7. lua函数
 - 8. lua运算符
 - 8.1 算数运算符
 - 8.2 关系运算符
 - 8.3 逻辑运算符
 - 8.4 其他运算符
 
- 9. lua字符串
 - 9.1 字符串格式化
 - 9.2 匹配模式
 
- 10. lua数组
 - 11. lua迭代器
 - 11.1 Lua table
 
- 12. lua 模块
 - 12.1 加载机制
 - 12.2 C 包
 
接着上一篇的内容。Lua学习(一)
7. lua函数
函数是对语句和表达式进行抽象的主要方法
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)function_bodyreturn result_params_comma_separated
end
 
- optional_function_scope: 该参数是可选的指定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local。
 - function_name: 指定函数名称。
 - argument1, argument2, argument3…, argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。
 - function_body: 函数体,函数中需要执行的代码语句块。
 - result_params_comma_separated: 函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。
 
8. lua运算符
8.1 算数运算符
下表列出了 Lua 语言中的常用算术运算符,设定 A 的值为10,B 的值为 20:
| 操作符 | 描述 | 实例 | 
|---|---|---|
| + | 加法 | A + B 输出结果 30 | 
| - | 减法 | A - B 输出结果 -10 | 
| * | 乘法 | A * B 输出结果 200 | 
| / | 除法 | B / A 输出结果 2 | 
| % | 取余 | B % A 输出结果 0 | 
| ^ | 乘幂 | A^2 输出结果 100 | 
| - | 负号 | -A 输出结果 -10 | 
| // | 整除运算符(>=lua5.3) | 5//2 输出结果 2 | 
8.2 关系运算符
下表列出了 Lua 语言中的常用关系运算符,设定 A 的值为10,B 的值为 20:
| 操作符 | 描述 | 实例 | 
|---|---|---|
| == | 等于,检测两个值是否相等,相等返回 true,否则返回 false | (A == B) 为 false。 | 
| ~= | 不等于,检测两个值是否相等,不相等返回 true,否则返回 false | (A ~= B) 为 true。 | 
| > | 大于,如果左边的值大于右边的值,返回 true,否则返回 false | (A > B) 为 false。 | 
| < | 小于,如果左边的值大于右边的值,返回 false,否则返回 true | (A < B) 为 true。 | 
| >= | 大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false | (A >= B) 返回 false。 | 
| <= | 小于等于, 如果左边的值小于等于右边的值,返回 true,否则返回 false | (A <= B) 返回 true。 | 
8.3 逻辑运算符
表列出了 Lua 语言中的常用逻辑运算符,设定 A 的值为 true,B 的值为 false:
| 操作符 | 描述 | 实例 | 
|---|---|---|
| and | 逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B。 | (A and B) 为 false。 | 
| or | 逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B。 | (A or B) 为 true。 | 
| not | 逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。 | not(A and B) 为 true。 | 
8.4 其他运算符
下表列出了 Lua 语言中的连接运算符与计算表或字符串长度的运算符:
| 操作符 | 描述 | 实例 | 
|---|---|---|
| … | 连接两个字符串 | a…b ,其中 a 为 "Hello " , b 为 “World”, 输出结果为 “Hello World”。 | 
| # | 一元运算符,返回字符串或表的长度。 | #“Hello” 返回 5 | 
9. lua字符串
字符串是一种基本的数据类型,用于存储文本数据。Lua 中的字符串可以包含任意字符,包括字母、数字、符号、空格以及其他特殊字符。
--- 无论是单引号还是双引号 都是string
s = "nimaho1233"string.len(s) --- 字符串的长度 
9.1 字符串格式化
local sourcestr = "prefix--runoobgoogletaobao--suffix"
print("\n原始字符串", string.format("%q", sourcestr))-- 截取部分,第4个到第15个
local first_sub = string.sub(sourcestr, 4, 15)
print("\n第一次截取", string.format("%q", first_sub))-- 取字符串前缀,第1个到第8个
local second_sub = string.sub(sourcestr, 1, 8)
print("\n第二次截取", string.format("%q", second_sub))-- 截取最后10个
local third_sub = string.sub(sourcestr, -10)
print("\n第三次截取", string.format("%q", third_sub))-- 索引越界,输出原始字符串
local fourth_sub = string.sub(sourcestr, -100)
print("\n第四次截取", string.format("%q", fourth_sub))
 
- %c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
 - %d, %i - 接受一个数字并将其转化为有符号的整数格式
 - %f - 接受一个数字并将其转化为浮点数格式
 - %g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
 - %q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
 - %s - 接受一个字符串并按照给定的参数格式化该字符串
 - %o - 接受一个数字并将其转化为八进制数格式
 - %u - 接受一个数字并将其转化为无符号整数格式
 - %x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
 - %X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
 - %e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
 - %E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
 
string.find (str, substr, [init, [plain]])
在一个指定的目标字符串 str 中搜索指定的内容 substr,如果找到了一个匹配的子串,就会返回这个子串的起始索引和结束索引,不存在则返回 nil。-----init 指定了搜索的起始位置,默认为 1,可以一个负数,表示从后往前数的字符个数。-----lain 表示是否使用简单模式,默认为 false,true 只做简单的查找子串的操作,false 表示使用使用正则模式匹配。----- 以下实例查找字符串 "Lua" 的起始索引和结束索引位置:
string.find("Hello Lua user", "Lua", 1) string.format(...)
返回一个类似printf的格式化字符串
> string.format("the value is:%d",4)
the value is:4
 
9.2 匹配模式
-  
.(点): 与任何字符配对
 -  
%a: 与任何字母配对
 -  
%c: 与任何控制符配对(例如\n)
 -  
%d: 与任何数字配对
 -  
%l: 与任何小写字母配对
 -  
%p: 与任何标点(punctuation)配对
 -  
%s: 与空白字符配对
 -  
%u: 与任何大写字母配对
 -  
%w: 与任何字母/数字配对
 -  
%x: 与任何十六进制数配对
 -  
%z: 与任何代表0的字符配对
 -  
%x(此处x是非字母非数字字符): 与字符x配对. 主要用来处理表达式中有功能的字符(^$()%.[]*±?)的配对问题, 例如%%与%配对
 -  
[数个字符类]: 与任何[]中包含的字符类配对. 例如[%w_]与任何字母/数字, 或下划线符号(_)配对
 -  
单个字符类匹配该类别中任意单个字符;
 -  
单个字符类跟一个 ‘
*’, 将匹配零或多个该类的字符。 这个条目总是匹配尽可能长的串; -  
单个字符类跟一个 ‘
+’, 将匹配一或更多个该类的字符。 这个条目总是匹配尽可能长的串; -  
单个字符类跟一个 ‘
-’, 将匹配零或更多个该类的字符。 和 ‘*’ 不同, 这个条目总是匹配尽可能短的串; -  
单个字符类跟一个 ‘
?’, 将匹配零或一个该类的字符。 只要有可能,它会匹配一个; -  
%*n*, 这里的 n 可以从 1 到 9; 这个条目匹配一个等于 n 号捕获物(后面有描述)的子串。 
10. lua数组
数组,就是相同数据类型的元素按一定顺序排列的集合,可以是一维数组和多维数组。在 Lua 中,数组不是一种特定的数据类型,而是一种用来存储一组值的数据结构。实际上,Lua 中并没有专门的数组类型,而是使用一种被称为 “table” 的数据结构来实现数组的功能。
总结来来说就是 lua中没有数组这里使用的其实是table
-- 创建一个数组
local myArray = {10, 20, 30, 40, 50}-- 访问数组元素
print(myArray[1])  -- 输出 10
print(myArray[3])  -- 输出 30
 
function init()local myArray = {}for i = 1, 10 domyArray[i]=iendfor i, v in ipairs(myArray) doprint(v)end
end
--- 初始化
 
11. lua迭代器
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址
for k, v in pairs(t) doprint(k, v)
end
上面代码中,k, v为变量列表;pairs(t)为表达式列表。-----------------------------------
function Iterators()local list = {"稳健打团","天意不可违","格局","莎莉","虞姬"}for key, value in pairs(list) doprint(string.format("我是key:%02s 我是value:%s",key,value))end
endIterators()
 
11.1 Lua table
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组、字典等。Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。
-- 初始化表
mytable = {}-- 指定值
mytable[1]= "Lua"-- 移除引用
mytable = nil
-- lua 垃圾回收会释放内存
 
当我们为 table a 并设置元素,然后将 a 赋值给 b,则 a 与 b 都指向同一个内存。如果 a 设置为 nil ,则 b 同样能访问 table 的元素。如果没有指定的变量指向a,Lua的垃圾回收机制会清理相对应的内存。
tables = {}
print(type(tables)) -- 查看table的类型function TestTable(length)local myTable = {}for i = 1, length domyTable[i] = i*2+1;print(myTable[i])endmyTable["tt"] = "恐龙"print(myTable["tt"])
endTestTable(10) 
table的方法
table.concat (table [, sep [, start [, end]]])
参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。table.sort (table [, comp])
对给定的table进行升序排序。table.insert (table, [pos,] value):
在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.table.remove (table [, pos])
返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。	
 
function TestMethod()fruits = {"banana","orange","apple","Watermelon","persimmon"}list = {1,2,3,4,5,89,0}--print(table.concat(fruits,","))--print(table.concat(fruits))table.sort(list)table.insert(list,10)print("排序后")for i,v in ipairs(list) doprint(i,v)end
end
TestMethod() 
12. lua 模块
模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。模块是一个table结构所很简单
--- 首先声明一下一个模块并且要和lua文件名一样
model = {}model.const ="我是常量"--- 公共函数
function model.fun1()print("我是共有函数")
end--- 私有函数
function fun2()print("我是私有函数")
endfunction model.fun3()fun2()
end
--- 最后需要返回
return model
 
--- 使用的时候只需要 使用require函数即可local model =require("models")
print(model.fun3())
 
12.1 加载机制
对于自定义的模块,模块文件不是放在哪个文件目录都行,函数 require 有它自己的文件路径加载策略,它会尝试从 Lua 文件或 C 程序库中加载模块。require 用于搜索 Lua 文件的路径是存放在全局变量 package.path 中,当 Lua 启动后,会以环境变量 LUA_PATH 的值来初始这个环境变量。如果没有找到该环境变量,则使用一个编译时定义的默认路径来初始化。
12.2 C 包
Lua和C是很容易结合的,使用 C 为 Lua 写包。与Lua中写包不同,C包在使用以前必须首先加载并连接,在大多数系统中最容易的实现方式是通过动态连接库机制
local path = "/luaDownload/lua-5.4.6/lib/libluasocket.so"
local f = loadlib(path, "luaopen_socket")
 
loadlib 函数加载指定的库并且连接到 Lua,然而它并不打开库(也就是说没有调用初始化函数),反之他返回初始化函数作为 Lua 的一个函数,这样我们就可以直接在Lua中调用他。如果加载动态库或者查找初始化函数时出错,loadlib 将返回 nil 和错误信息。我们可以修改前面一段代码,使其检测错误然后调用初始化函数:
local path = "/luaDownload/lua-5.4.6/lib/libluasocket.so"
-- 或者 path = "C:\\windows\\luasocket.dll",这是 Window 平台下
local f = assert(loadlib(path, "luaopen_socket"))
f()  -- 真正打开库
相关文章:
Lua学习(二)
Lua基础学习 7. lua函数8. lua运算符8.1 算数运算符8.2 关系运算符8.3 逻辑运算符8.4 其他运算符 9. lua字符串9.1 字符串格式化9.2 匹配模式 10. lua数组11. lua迭代器11.1 Lua table 12. lua 模块12.1 加载机制12.2 C 包 接着上一篇的内容。Lua学习(一)…...
制作鲜花商城小程序的详细步骤
如果你是一个新手商家,想要进入鲜花团购市场,但是不知道如何制作一个小程序商城,那么这篇文章就是为你准备的。以下是制作鲜花团购小程序商城的详细步骤: 1. 登录乔拓云平台后台,进入商城管理页面 首先,你需…...
Ubuntu20以上高版本如何安装低版本GCC
安装了Ubuntu 20.04之后,通过命令行 sudo apt-get install build-essential安装gcc,再通过命令行 gcc -v可查看gcc版本为gcc13 如果想用低版本的gcc,比如gcc4.8,尝试输入命令 sudo apt-get install gcc-4.8会提示找不到gcc4.8的…...
context.WithCancel()的使用
“ WithCancel可以将一个Context包装为cancelCtx,并提供一个取消函数,调用这个取消函数,可以Cancel对应的Context Go语言context包-cancelCtx[1] 疑问 context.WithCancel()取消机制的理解[2] 父母5s钟后出门,倒计时,父母在时要学习,父母一走…...
vue3中引入百度地图
话不多说直接开干 1.第一种方式 百度地图地址 打开 https://lbsyun.baidu.com/index.php?title%E9%A6%96%E9%A1%B5 然后点进去地图 然后再这个功能里面选择一个地图,然后跳转页面 然后一直下滑 滑到底部 点击这个 跳转到这个页面 然后点击进入demo这个 然后到这个…...
【Linux-Day8- 进程替换和信号】
进程替换和信号 问题引入 我们发现 终端输入的任意命令的父进程都是bash,这是因为Linux系统是用fork()复制出子进程,然后在子进程中调用替换函数进行进程替换,实现相关命令。 (1) exec 系列替换过程:pcb 使用以前的只…...
日志文件之间关系和介绍及应用
1.常用日志框架代码举例 Log4j: Log4j是Java中广泛使用的日志框架之一。它提供了灵活的配置选项和丰富的功能,支持日志级别、日志输出目标等。Log4j有1.x版本和2.x版本,其中Log4j 2.x是对1.x的升级和扩展。 Logback: Logback是由Log4j创始人设计的Log4…...
mac电脑屏幕录制Berrycast Mac屏幕录制软件
Berrycast是一款为Mac设计的优秀屏幕录制软件,它让屏幕录制变得简单而高效。以下是Berrycast的一些主要特点: 简单的用户界面:Berrycast拥有直观和简洁的用户界面,使得用户可以轻松上手。高质量的视频输出:Berrycast能…...
机器学习笔记之最优化理论与方法(一)最优化问题概述
机器学习笔记之最优化理论与方法——最优化问题概述 引言什么是最优化问题最优化问题的基本形式最优化问题的分类各分类最优化问题的数学表达约束优化VS无约束优化线性规划VS非线性规划连续优化VS离散优化单目标优化VS多目标优化 引言 从本节开始,将对最优化理论与…...
【ES5新特性一】 严格模式语法变化、全局的JSON对象、编码和解码的方法
前言 ECMAScript 和 JavaScript 的关系 一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系? 要讲清楚这个问题,需要回顾历史。1996 年 11 月,JavaScript 的创造者 Netscape 公司,决定将 JavaScript 提交给标准…...
Java【手撕滑动窗口】LeetCode 3. “无重复字符的最长子串“, 图文详解思路分析 + 代码
文章目录 前言一、长度最小子数组1, 题目2, 思路分析3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 📗 Java数据结构: 顺序表, 链…...
学习哈哈哈哈
# 零、学习计划 * 数据库相关 * 索引 * [我以为我对数据库索引很了解,直到我遇到了阿里面试官 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/107487215) * [给我一分钟,让你彻底明白MySQL聚簇索引和非聚簇索引 - 知乎 (zhihu.com)](ht…...
05-基础例程5
基础例程5 1、超声波测距 实验介绍  HC-SR04超声波传感器是一款测量距离的传感器。其原理是利用声波在遇到障碍物反射接收结合声波在空气中传播的速度计算的得出。 外观 管脚功能的定义 VCC:供电电源;Trig:触发信号;Echo&a…...
双基证券:预计未来还会有更多政策来吸引增量资金
双基证券表示,8月27日,活泼资本商场五大方针出台:证券交易印花税折半征收;阶段性收紧IPO节奏;上市房企再融资不受破发、破净和亏本限制;标准控股股东与实际操控人减持行为;融资保证金最低份额由…...
前端:html实现页面切换、顶部标签栏,类似于浏览器的顶部标签栏(完整版)
效果 代码 <!DOCTYPE html> <html><head><style>/* 左侧超链接列表 */.link {display: block;padding: 8px;background-color: #f2f2f2;cursor: pointer;}/* 顶部标签栏 */#tabsContainer {width:98%;display: flex;align-items: center;overflow-x: …...
强化自主可控,润开鸿发布基于RISC-V架构的开源鸿蒙终端新品
2023 RISC-V中国峰会于8月23日至25日在北京召开,峰会以“RISC-V生态共建”为主题,结合当下全球新形势,把握全球新时机,呈现RISC-V全球新观点、新趋势。本次大会邀请了RISC-V国际基金会、业界专家、企业代表及社区伙伴等共同探讨RISC-V发展趋势与机遇,吸引超过百余家业界企业、高…...
软件设计师知识点·1
控制器: (1)指令寄存器(IR) : CPU执行一条指令时,从内存储器取到缓冲寄存器中,再送入IR暂存; (2)程序计数器(PC): 将要执行的下一条指令的地址; (3)地址寄存器(IR): 当前CPU所访问的内存单元地址; (4)指令译码器(ID): 对指令中的操作码字段进行分析解释; 多核CPU可以满足用户…...
修改Jupyter Notebook默认打开路径
这里我是重新下载的anaconda,打开Jupyter之后是默认在C盘的一个路径的,现在我们就来修改一下它的一个默认打开路径,这样在我们后续学习过程中,可以将ipynb后缀的文件放在这个目录下就能查看了。 1、先打开Anaconda Prompt&#x…...
经典卷积网络
目录 一、经典神经网络出现的时间线编辑 二、LeNet 三、AlexNet 四、VGGNet 五、InceptionNet 六、ResNet 总结: 一、经典神经网络出现的时间线 二、LeNet 背景:LeNet由Yann LeCun于1998年提出,卷积网络开篇之作。 解释࿱…...
react+koa+vite前后端模拟jwt鉴权过程
路由组件(生成token) const Router require(koa/router) const jwt require(jsonwebtoken); const router new Router()const mockDbUserInfo [{nickname: xxxliu,username: Tom,password: 123456,icon: url1},{nickname: xxx,username: John,passw…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能
vxe-table vue 表格复选框多选数据,实现快捷键 Shift 批量选择功能 查看官网:https://vxetable.cn 效果 代码 通过 checkbox-config.isShift 启用批量选中,启用后按住快捷键和鼠标批量选取 <template><div><vxe-grid v-bind"gri…...
