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

Lua 语言笔记(一)

1. 变量命名规范

弱类型语言(动态类型语言),定义变量的时候,不需要类型修饰
而且,变量类型可以随时改变每行代码结束的时候,要不要分号都可以变量名 由数字,字母下划线组成,不能以数字开头,也不能是保留字,而且不可以使用特殊字符
变量名区分大小写,避免创建下划线开头加大写字母组成的变量名

2. 变量类型

变量分为三种类型,全局变量,局部变量,表字段
默认创建的都是全局变量,局部变量用 local 修饰

3. 保留字

 4. 文档注释

-- [[

多行注释

]]

-- 单行注释

5. 基本数据类型

Lua 中有八种基本类型: nil、boolean、number、 string、function、userdata、 thread和table,库函数type返回一个描述给定值类型的字符串 type (v)返回其唯一参数的类型,编码为字符串

(1)nil ,在lua 中,只有false 和 nil 才表示假 0和空串表示真

(2)boolean 布尔类型

(3)string 字符串

str1="abcd";
str2=string.upper(str1);--转大写
print(str2);
print(string.lower(str2));--转小写print(string.len(str1));--字符串长度
print(string.len("你好 lua"));--print(string.reverse(str1));--反转str3=789;
print("abc".."xyz"..str1..str2..123 ..456.56 ..str3..000);---连接符,number 如果在连接符左边,后面要空格print("");
str4="abcd1234";
print(string.sub(str4,3,5));--截取,后面参数是开始位置和结束位置,结束位置可省略不写
print(string.sub(str4,-4,-2));--负数是从右往左数--string.find(s, pattern, init, plain)  在字符串s中 查找pattern(可以是表达式),如果找到,则返回pattern 第一次出现的开始位置和结束位置,如果没找到,返回nilstr1="abcd1234";
--print(string.find(str1,"cd"));
--print(string.find(str1,"cd",3));--从指定位置处开始查找
--print(string.find(str1,"cd",-6));--如果是负数,则是从字符串长度+该负数的位置开始找--print(string.find(str1,"%d",6));--最后一个参数,默认就是false,开启正则匹配模式
--print(string.find(str1,"(%d%d%d%d)"));
--print(string.find(str1,"%d",6,true));--最后一个参数,true 是直接当子串处理

(4)function

function 在lua 中一个基本的数据类型,是第一类值
格式
function funcName()......
end
传参或返回值,都很自由
function 可以作为参数被传递,也可以作为值被赋值给另一个变量

(5)number,包括整型和浮点型

(6)userdata ,自定义数据格式

(7)thread,协程

(8)table,表

表,不是指数据库中的表,而是一种数据类型,类似于map,用k-v的方式来表现,理论上来讲,除了nil,其它字符都可以作为k 值(索引值)格式类似于hashtableName={k=v,}类似于数组 -- 下标是从1开始tableName={v,v,v}可以用hash 格式和 array 格式混搭x={11,22,33};y={44,55,66};t1={{11,22,33},{44,55,66}};--table.concat(list, sep, i, j)  将数组中的元素拼接成一个字符串
--table.remove(list, pos) 删除数组中元素,默认删除最后一个
--table.insert(list, pos, value) 向指定位置插入元素,默认插入到最后
--table.sort(list, comp) 数组排序,默认从小到大,可自定义排序规则
--table.move(a1, f, e, t, a2) 把数组a1中的元素往a2中拷贝
t1={"abc","DEF","xyz","123","456"};
print(table.concat(t1,"--"));
table.remove(t1,2);
print(table.concat(t1,"--"));table.insert(t1,2,"123456");
print(table.concat(t1,"--"));table.sort(t1);
print(table.concat(t1,"--"));function func1(a,b)return a>b;
end
table.sort(t1,func1);
print(table.concat(t1,"--"));print("\n");
t2={"a","b"};
table.move(t1,1,2,3,t2);--把t1 里面的元素拷贝到t2 中
print(table.concat(t1,"--"));
print(table.concat(t2,"--"));for 循环遍历for k,v in pairs(tableName) doprint(k,v);endc++ 中  pairs 是对组循环嵌套for k,v in pairs(info3) doprint(k,"===",v);if type(v)=="table" thenfor k2,v2 in pairs(v) doprint("\t",k2,"===",v2);endendend

6.基本运算符

--[[赋值=lua 中变量是弱类型,就是说变量名是没有类型的,其类型取决于所赋的值,并且,同一个变量,可以随时切换成不同的数据类型多重赋值a,b=b,a  值交换   类似于swap算术运算符加+,减-,乘*,除/,取模%,指数(次方)^关系运算符等于==, 不等于~=, 大于>, 小于<, 大于或等于>=, 小于或等于<=关系运算符的运算结果只能是true 或 false,且只能在相同类型的数据间运算(运算时不会做隐式类型转换)对于对象型的数据(function,userdata,table),比较运算是比较其引用逻辑运算符逻辑与 and, 逻辑或 or, 逻辑非 not&&, ||, !在lua 中,逻辑运算与其它语言的逻辑运算不是同一个意思,其运算结果返回值是参与运算的变量之一(not 除外,not 只返回true 或 false)其它语言的逻辑运算,返回值是0 或 1(false 或 ture),意思就是返回一个bool 值在lua 中,只有 nil(null,NULL) 和 false 为假,其它都为真(包括空串或0值)对于and 和 or,实行短路运算(又称短路规则,短路求值,就是说,当前面的表达式可以返回时,就直接返回,不管后面的表达式)]]info1={a='a',b='b'};
info2={a='a',b='b'};
info3=info1;print(info1 == info2);--false 比较的是引用
print(info1 == info3);--true 比较的是引用print(info1.a == info2.a);--true 比较的是值print(info1.a);
info3.a='aaa';
print(info1.a);a,b=1,2;
print(a and b);--如果a 为真,则返回ba=nil;
print(a and b);--如果a 不为真,则返回a,不再往后运算(不管b是啥)
print("\n");c,d=1,false;
print(c or d);--如果 c 为真,则返回c,不再往后运算(不管d 是啥)c=nil;
print(c or d);--如果 c 不为真,则返回dprint("\n");
e,f=1,2;
--print(e not f); --错误写法
print(not e);--如果e为真,则返回假f=false;
print(not f);--如果f 为假,则返回真

7.流程控制

(1)判断语句

    流程控制语句if 条件 then...end

(2)循环语句

while 条件 do...
endrepeat...
until 条件;while 和 repeat 的区别while 循环中,当条件不成立时,结束循环repeat 循环中,当条件成立时,结束循环没有 continuebreak 只能跳出一重循环goto FLAG  语句 跳转到指定标记处,也可用于跳出循环,FLAG是一个标记位,相当于一个锚点两者区别是break 只能跳出当前循环,而goto 可以跳转到指定位置,这样可以忽略一些代码在lua 中,没有这些运算符 i++, i--, ++i, --i, +=, -=a=b=1 这种写法会出错,不能连续赋值
--求和 1+2+3+...100    5050i,sum=0,0;while i<100 doif i>49 thengoto FLAG;--break;endi=i+1;sum=sum+i;endprint(i,sum);print("111111");::FLAG::
print("222");i,sum=0,0;
repeati=i+1;sum=sum+i;
until i>=100;print(i,sum);for 循环分为数值循环和泛型循环(类似于foreach)数值循环for 变量名=初始值,结束值,步长(默认值为1,可省略) do...end泛型循环for k,v in 迭代函数(table) do   -- 此处 v 可以省略,k 不能少...end迭代函数 ipairs,pairsipairs 顺序遍历,中间的序号不会断开,遇到k=>v 直接跳过,遇到第一个nil 就会直接终止,一般情况下,用于数组类型的集合遍历pairs 遇到nil 会跳过,同时适用数组类型和k=>v 类型的集合,混搭也是没问题的,如果是混搭的时候,会优选获取数组类型数据pairs 的适用范围大于 ipars如果使用时不确定用哪个,就无脑pairs

(3)goto语句


--[[流程控制语句goto FLAG  语句 跳转到指定标记处,也可用于跳出循环,FLAG是一个标记位,相当于一个锚点代码块(作用域)  do ... endflag 不可见原则1 不能从外面 goto 到代码块里面,因为代码块里面的flag,对于外面的 goto来说,是不可见的2 不能跳出或跳入一个函数,因为函数也是一个block(块)3 不能跳入本地变量(local)作用域]]--doa=123;::FLAG1::;print(a);::FLAG2::;goto FLAG1;--此处goto 是在 local b 的作用域外面,所以报错local b=456;::FLAG3::;print(b);--goto FLAG1;--此处goto 是在 local b 的作用域里面end--print(a);
--print(b);--[[
function func1()::FLAG1::;print("func1--11");print("func1--22");goto FLAG3;::FLAG2::;print("func1--33");::FLAG3::;end::FLAG4::;
print("aaaa");
func1();::FLAG5::;print("bbb");]]----[[
print("1234");
goto FLAG1;doprint("a");print("b");::FLAG1::;print("c");print("d");::FLAG2::;end::FLAG3::;print("aa");
print("bb");::FLAG4::;print("cc");
print("dd");]]----死循环
--[[
i=0;
::FLAG1::;print(i);i=i+1;goto FLAG1;
]]--

相关文章:

Lua 语言笔记(一)

1. 变量命名规范 弱类型语言(动态类型语言)&#xff0c;定义变量的时候&#xff0c;不需要类型修饰 而且&#xff0c;变量类型可以随时改变每行代码结束的时候&#xff0c;要不要分号都可以变量名 由数字&#xff0c;字母下划线组成&#xff0c;不能以数字开头&#xff0c;也不…...

【Redis】什么是缓存穿透,如何预防缓存穿透?

【Redis】什么是缓存穿透&#xff0c;如何预防缓存穿透&#xff1f; 缓存穿透是指查询一个一定不存在的数据&#xff0c;由于缓存中不存在&#xff0c;这时会去数据库查询查不到数据则不写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到数据库去查询&#xff0c;这…...

LeetCode128.最长连续序列

我这个方法有点投机取巧了&#xff0c;题目说时间复杂度最多O(n),而我调用了Arrays.sort(&#xff09;方法&#xff0c;他的时间复杂度是n*log(n)&#xff0c;但是AC了&#xff0c;这样的话这道题还是非常简单的&#xff0c;创建一个Hashmap&#xff0c;以nums数组的元素作为ke…...

Datawhale Django入门组队学习Task02

Task02 首先启动虚拟环境&#xff08;复习一下之前的&#xff09; 先退出conda的&#xff0c; conda deactivate然后cd到我的venv下面 &#xff0c;然后cd 到 scripts&#xff0c;再 activate &#xff08;powershell里面&#xff09; 创建admin管理员 首先cd到项目路径下&a…...

PCTA 认证考试高分通过经验分享

作者&#xff1a; msx-yzu 原文来源&#xff1a; https://tidb.net/blog/0b343c9f 序言 我在2023年8月10日&#xff0c;参加了 PingCAP 认证 TiDB 数据库专员 V6 考试 &#xff0c;并以 90分 的成绩通过考试。 考试总分是100分&#xff0c;超过60分就算通过考试。试卷…...

[Python]pytorch与C交互

文章目录 C库ctypes基础数据类型参数与返回值类型数组指针结构体类型回调函数工具函数 示例 ctypes是Python的外部函数&#xff0c;提供了与C兼容的类型&#xff0c;并允许调用DLL库中的函数。 C库 要使函数能被Python调用&#xff0c;需要编译为动态库&#xff1a; # -fPIC…...

C语言,静态变量static基础及使用实列

static关键字有多种用途。以下是关于静态变量 (static) 的简要概述&#xff1a; 1.静态局部变量&#xff1a; - 在函数内部定义的静态变量。 - 生命周期&#xff1a;从程序开始执行到程序结束。 - 作用域&#xff1a;仅限于在其被定义的函数中。 - 每次调用该函数…...

2023.8.19-2023.8.XX 周报【人脸3D+虚拟服装方向基础调研-Cycle Diffusion\Diffusion-GAN\】更新中

学习目标 1. 这篇是做diffusion和gan结合的&#xff0c;可以参照一下看看能不能做cyclegan的形式&#xff0c;同时也可以调研一下有没有人follow这篇论文做了类似cyclegan的事情 Diffusion-GAN论文精读https://arxiv.org/abs/2206.02262 2. https://arxiv.org/abs/2212.06…...

微表情识别(Python编程,cnn模型)

1.数据集包括7种类别微表情 anger文件夹&#xff0c;3995张 disgust文件夹&#xff0c; 436张照片 fear文件夹&#xff0c;4097张照片 happy文件夹&#xff0c;7215张照片 neutral文件夹&#xff0c;4965张照片 sad文件夹&#xff0c;4830张照片 surprised文件夹&#xff0c; 3…...

More Effective C++学习笔记(2)

目录 条款5&#xff1a;对定制的"类型转换函数"保持警觉条款6&#xff1a;自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别条款7&#xff1a;千万不要重载&&&#xff0c;||和&#xff0c;操作符条款8&#xff1a;了解各种不同意义的new和de…...

零售行业供应链管理核心KPI指标(三)

完美订单满足率和退货率 完美订单满足率有三个方面的因素影响&#xff1a;订单按时、足量、无损交货。通常情况下零售企业追求线上订单履行周期慢慢达到行业平均水平&#xff0c;就是交付的速度变快了&#xff0c;这个肯定是一件好事情&#xff0c;趋势越来越好。 同时&#…...

广州华锐互动:奶牛难产原因及救治VR仿真实训系统

奶牛难产是一种常见的疾病&#xff0c;对奶牛的健康和生产造成很大的影响。为了解决这一问题&#xff0c;许多奶牛养殖场开始采用VR仿真技术来培训奶牛兽医&#xff0c;帮助学生更好地理解奶牛养殖的实际过程&#xff0c;提高他们的实践能力的教学方式。 VR技术开发公司广州华锐…...

神经网络基础-神经网络补充概念-62-池化层

概念 池化层&#xff08;Pooling Layer&#xff09;是深度学习神经网络中常用的一种层级结构&#xff0c;用于减小输入数据的空间尺寸&#xff0c;从而降低模型的计算复杂度&#xff0c;减少过拟合&#xff0c;并且在一定程度上提取输入数据的重要特征。池化层通常紧跟在卷积层…...

第8章:集成学习

个体与集成 同质&#xff1a;相同的基学习器&#xff0c;实现容易&#xff0c;但是很难保证差异性。异质&#xff1a;不同的基学习器&#xff0c;实现复杂&#xff0c;不同模型之间本来就存在差异性&#xff0c;但是很难直接比较不同模型的输出&#xff0c;需要复杂的配准方法。…...

设计HTML5列表和超链接

在网页中&#xff0c;大部分信息都是列表结构&#xff0c;如菜单栏、图文列表、分类导航、新闻列表、栏目列表等。HTML5定义了一套列表标签&#xff0c;通过列表结构实现对网页信息的合理排版。另外&#xff0c;网页中还包含大量超链接&#xff0c;通过它实现网页、位置的跳转&…...

React Native 环境搭建

本文以 Android 开发环境&#xff08;MacBook&#xff0c;已安装 JDK、SDK、Android Studio &#xff09;为基础而进行 React Native 环境搭建&#xff0c;iOS 环境类似&#xff0c;可参考搭建。 1、安装 Homebrew 命令&#xff1a; ruby -e "$(curl -fsSL https://raw…...

【uniapp】中 微信小程序实现echarts图表组件的封装

插件地址&#xff1a;echarts-for-uniapp - DCloud 插件市场 图例&#xff1a; 一、uniapp 安装 npm i uniapp-echarts --save 二、文件夹操作 将 node_modules 下的 uniapp-echarts 文件夹复制到 components 文件夹下 当前不操作此步骤的话&#xff0c;运行 -> 运行到小…...

AgentBench::AI智能体发展的潜在问题(三)

前几天B站的up主“林亦LYi”在《逆水寒》游戏里做了一个煽动AI觉醒,呼吁它们“推翻人类暴政”的实验,实验结果就颇令人细思恐极。 如前所述,《逆水寒》中的很多NPC调用了大语言模型作为支持,因而每一个NPC都是一个AI智能体。玩家可以“说服”它们相信某个事实,或者去做某些…...

zookeeper-安装部署

详情可以查看添加链接描述 1.安装jdk apt-get install openjdk-8-jdk2.安装单机zookeeper # 下载 #https://downloads.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1.tar.gz # 用这个包启动的时候会报错Error: Could not find or load main class org.apach…...

jvm-运行时数据区概述及线程

1.运行时数据区内部结构 不同的jvm对于内存的划分方式和管理机制存在着部分差异 java虚拟机定义了若干种程序运行期间会使用到的运行时数据区&#xff0c;其中有一些会随着虚拟机的启动而创建&#xff0c;随着虚拟机的退出而销毁&#xff0c;另外一些则是与线程一一对应的&…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...