Lua学习总结二

Lua 运算符 Lua 运算符 主要学习C++中没有的运算符! Lua 运算符 运算符是一个特殊的符号,用于告诉解释器执行特定的数学或逻辑运算。Lua提供了以下几种运算符类型: 算术运算符 关系运算符 逻辑运算符 其他运算符 算术运算符 下表列出了 Lua 语言中的常用算术运算符,设定 A 的值为10,B 的值为 20: 操作符 描述 阅读详情

1.Lua中的循环

Lua中的循环和与C#非常类似,只是方法块没有{ }来包围。

比如while循环:

a=1
while (a<=10) do
    print(a)
    a=a+1      --Lua中没有a++ a--这种形式的运算哦!
end

这就是while循环的使用,至于for循环我们上一篇中展示过了数值for循环,但是Lua中还有一种叫做泛型for循环。

我们先看看数值for循环的例子:

for a=1,10,3 do  --1,10,3  分别代表开始、结束、步长,步长不指定的话默认为1
    print(a)
end

运行结果如下:

Lua学习总结二

很好理解,代码加上运行结果,一目了然了。

其实泛型for循环也很好理解,与C#中的foreach很相似,只是使用for循环来写:

tab={ ley1="ant",key2="mumu" }

for k,v in pairs(tab) do
   print(k,v)
end

运行结果:

Lua学习总结二

repeat  until循环:重复循环直到满足条件,满足条件后就不在循环了:

a=1

repeat
    a=a+1
    print(a)
until (a>5)

一个很新颖的写法,但是和C#中do while循环把判断条件放在后面是一样的。运行结果:

Lua学习总结二

循环进阶那就是循环的嵌套喽,我随手就写了一个冒泡排序:

tab={ 1,3,8,5,6,9,4,2}

for a=1,8 do
	for b=a+1,8 do
		if tab[a]>tab[b] then
			tab[a],tab[b]=tab[b],tab[a]
		end
	end

end

for a=1,8 do
	print(tab[a])
end

运行结果:

Lua学习总结二

堪称完美~~

2.流程控制

流程控制自然说的就是if else啦,与C#没什么太大不同。

但是要注意的是:在Lua中出了false和nil,其他的都为true。

3.可变参数的函数

Lua中什么是可变参数的函数呢?

我们看看例子:

print()
print(1)
print(1,2)
print(1,2,3)

Lua学习总结二

我们看到这个结果首先想到的就是面向对象中的多态。

那么我们在Lua中怎么去实现这样的方法呢?

function myfun(...)      --通过...来声明一个参数个数不定的函数
	print("我输入了"..#arg.."个参数")      --输入的参数会默认放在名为arg的table中,通过#可以获得其长度
end


myfun()
myfun(1)
myfun(1,2)
myfun(1,2,3)

我们看执行结果:

Lua学习总结二

嗯,可以说是非常有意思了。

4.运算符

算术运算符方面,与C#区别不大,只是在求余数的操作时,Lua中是可以对小数求余数的,比如0.9对0.2求余数,结果为0.1。

关系运算符方面都一样。== >  <  >=  <=,唯一不同的是Lua中还提供了不相等的运算符:~=

逻辑运算符方面功能是与C#一样的,只是写法不同了而已。and=&&   or=||  not=!

比如 a and b等效于a&&b,a or b等效于a||b,not a等效于!a

5.Lua中的数组

我们可以很容易地联想到:Lua中数组是以表来实现的,因为我们接触了Lua的内置数据类型,发现之后表与数组的特性最相似。

关于表的一些使用我们在前面也提到过,但是表仍然有让人惊讶的骚操作。

比如:表的索引可以是负数,甚至表的索引可以使小数,对,没错就是小数:

tab={1,2,3,4}

for i=1.1,4 do
    print(i,tab[i])
end

for循环的初始值是1.1,但是1.1,2.1,3.1不存在对应的值,所以为nil。

Lua学习总结二

当然了我们可以为它们赋值:

Lua学习总结二

为什么会出现这种情况呢

我思考的结果是:Lua中已经淡化了索引的概念,因为表中数据就是以key-value形式存在的,连字符串都能成为"索引",小数怎么就不行了?所以我觉得对于Lua中的表,不能完全用C#中的数组特性来理解,而是更多地把它看做是字典。

6.Lua中的迭代器

所谓的迭代器呢我们一般在遍历的时候会用到。比如在C#中我们会有这种形式:

int[] array=new int[];

xxxxxx
//一系列操作
xxxxxx

foreach(int num in array){
      if(xxxxxx){
        xxxxxxxx
    }
}

而在Lua中我们之前有过例子就很类似于C#中的foreach:

tab={key1="a",key2="b",key3="c"}

for k,v in pairs(tab) do
      xxxxxx
end

这里面的pairs就是一个内置好的迭代器,简单理解就是它可以代表tab中的每一个元素。Lua中还有一个内置迭代器ipairs。

它们的区别是:

pairs会遍历表中所有的数据元素,但是ipairs会遍历到第一个值为nil的元素为止。

比如tab[1]="a",tab[2]===nil,tab[3]="c"

遍历的时候如果使用ipairs来输出表中的值,只会输出第一个,因为第二个为nil,往后就终止遍历了,第三个自然也就访问不到了。

7.Lua中的表

table是Lua中非常重要的数据类型,因此我们不得不花费较多的时间来学习它。

实际上Lua中的table是一个"引用类型",为什么这么说呢?我们来看看:

tab1={1,2,3,4,5}

tab2=tab1

print(tab1[1])
print(tab2[1])

tab2[1]="a"

print(tab1[1])
print(tab2[1])

输出结果:

Lua学习总结二

试问如果tab1和tab2不是指向同一个对象,那么修改了tab2[1]的话,为什么tab1[1]也会发生变化呢?没理由呀!

那么我们在释放内存的时候仅仅通过tab1=nil就行了吗?

显然不行,tab1为nil,可是那一块内存区域还有tab2持有引用呢,所以当tab2也为nil的时候,这块内存区域才会被垃圾回收机制释放掉。我觉得这里是需要注意的地方。

我们在C#编程环境下做了验证,结果也是一样的:

class Program
    {
        static void Main(string[] args)
        {
            int[] array = new int[3] { 1, 2, 3 };

            int[] array2 = array;

            Console.WriteLine(array[0]);
            Console.WriteLine(array2[0]);

            array2[0] = 5;

            Console.WriteLine(array[0]);
            Console.WriteLine(array2[0]);

            Console.ReadKey();
        }
    }

输出结果:

Lua学习总结二

8.Lua中table提供的方法函数

table.concat方法:拼接表中元素,有三个重载。

tab1={1,2,3,4,5}

print(table.concat(tab1))		--无间隙拼接表内元素
print(table.concat(tab1,"-"))	--使用指定字符来连接
print(table.concat(tab1,2,4))	--了解表内指定范围的元素

输出结果:

Lua学习总结二

table.insert()方法:向表中插入元素

这个方法方便了我们向表中添加元素:

tab1={1,2,3,4,5}

table.insert(tab1,6)      --直接调用方法,默认向末尾插入值
table.insert(tab1,2,1.1)  --向指定位置插入值
for i=1,#tab1 do
	print(tab1[i])
end

输出结果:

Lua学习总结二

table.remove()方法:移除表内的元素

Lua学习总结二

上面的例子中我们通过将其中一个元素置为nil来删除元素,但是我们却发现后面的元素没有向前移动,我们在遍历相关元素的时候有可能会出现问题的。所以我们通过Lua中table提供的方法来移除表中的元素:

tab1={1,2,3,4,5}

table.remove(tab1)
table.remove(tab1,2)

for i=1,#tab1 do
	print(tab1[i])
end

我们可以看到运行结果:

Lua学习总结二

这样一来我们移除元素之后的表内的每一个元素都是有意义的,减少了可能会出现的错误。

table.sort()方法:对表中元素进行排序

表中元素如果是number类型的,则会按照数字的大小从小到大排序,如果是字符串的话,则会按照ASCII码表的顺序进行排序。

 

内容很多,有理解错误的地方欢迎大佬们批评指正,谢谢!

Lua 学习教程之android与lua相互调用(二) 在Android项目中使用Lua,需要两个步骤: 1、加载Lua脚本解析引擎。 2、以Native API方式调用引擎接口 直接以JNI方式调用Lua解析引擎的接口十分麻烦,开源项目LuaJava(https://github.com/mkottman/AndroLua )对这些JNI接口进行了很好的封装,它是一个包含了LuaJava的Android平台的Lua解析器,它提供一系列映射到Lua C实现函数的Java接口。 1.获取LuaJava 工程,引入到你的Eclipse中,并将其设为 阅读详情

相关推荐

OpenClaw本地部署教程

本文详细介绍了在Windows 11系统上部署OpenClaw与Ollama本地模型的完整流程。主要内容包括:硬件要求说明、Node.js环境配置、Ollama模型安装与定制(重点扩展上下文窗口至32768 tokens)、OpenClaw核心框架安装与对接、常见问题解决(如模型上下文窗口过小报错)以及可选技能扩展和飞书接入方案。部署全程约需1-2小时,强调使用备用设备或虚拟机以确保安全,并提供关键配置参数和排错命令。该方案实现了"数据不出门、推理本地化"的私有化部署目标。

技术引领业务创新 2580

Lua基本语法

Lua基本语法 Lua中的关键字 Lua中的保留字,这些保留的字不可以被用作常量或变量,或任何其他标识符。 and break do else elseif end false for function if in local nil not or repeat return then true until while Lua中的保留字如下:关键字不能当作标识符,Lua大小写敏感。 注意事项 ...

Bluce张のGameNote 4307

电商平台大数据分析指标

一、五大关键数据分析指标 1.1活跃用户量 活跃用户量是一个基本的指标,有 DAU(日活跃用户)、WAU(周活跃用户)和 MAU(月活跃用户)三个层次; 1.2转化 转化是一个非常重要的指标,电商运营需要关注主路径、次路径甚至精细到每一个品类 / SKU 的转化率; 1.3留存 留存要从不同的时间周期上研究,包括次日留存率、3 日、7 日、30 日留存; 1.4复购 复购则要从 3 个角度去看,复购用户量、复购率和复购金额比; 1.5GMV GMV 是最重要的指标,我们的运营最终是围绕这

默主归沙的博客 4819

lua 条件语句

lua 条件语句

weixin_43931625的博客 1093

virtualbox虚拟机里面最顶部没有控制、设置和帮助等选项

无意中操作,导致virtualbox虚拟机里面最顶部没有控制,设置和帮助选项  virtualbox虚拟机窗口显示如下如: 如何设置,窗口显示如下图所示呢: virtualbox虚拟机窗口模式显示设置,切换可以通过如下图所示操作进行切换: PS:一定要是右边的Ctrl+C

WEL测试 8780

TI C2000 , .cmd文件,.TI.ramfunc,将程序分配为在RAM中运行/Flash运行的配置方法和原理讲解,(如28375S ,280049,28335等等芯片)

1 基础知识讲解 1.1 在RAM中运行还是在flash中运行指的是什么? 1.1.1 背景:程序编译完之后生成的.bin文件,.bin文件中包含代码段,代码段中全是汇编指令,而汇编指令中包含多个函数,各函数头的地址不同,如存在A函数和B函数,假设RAM地址区间是0x0000-0x8000,flash的地址区间是0xA000-0xF000,A函数要调用B函数,则A函数调用B函数的那段汇编指令中包含的是B函数头的存储地址,A函数和B函数都在flash中有存储 1.1.2 情况1:B函数是配置为在RAM中运行,

weixin_43776284的博客 8069

Lua 数据类型

assasa

qq_37601157的博客 189

贝叶斯核机回归估计混合物健康效应 【BKMR包】——实操篇

使用 ggplot2包绘制 h 的截面# 绘制总体风险摘要。

三分钟热度 5382

Lua基础 类型和值(二)

5.Table Lua的table类型比较强大,用过都知道,它的index不仅可以使用number,还能使用string等其他的值,nil除外。table没有固定的size,你可以动态地向table中添加元素。table是Lua中的主要数据结构。在Lua中,我们用table来表示普通数组,符号表,set,record,queue和其他的lua数据结构。Lua也使用table来表示module,p...

互联网 281

【AI应用实战-OpenCode】OpenCode安装部署(一)

OpenCode是一款2026年流行的开源AI编程工具,兼具轻量代码编辑器和智能编码代理功能。其核心优势包括:完全免费开源(MIT协议)、全平台兼容、支持75+大模型(含本地部署)、内置完整编程功能链(代码补全/Git集成/AI调试等),且所有数据本地存储确保隐私安全。相比Copilot等商业工具,OpenCode提供更自由的模型选择和零门槛使用体验。安装要求Windows10+/macOS12+/Linux主流发行版,仅需200MB空间和4G内存。该工具完美兼容VSCode生态,支持终端/桌面/IDE三种

2431

人员行为规范检测:YOLOv8+C#实现工厂车间安全监控,违规即报警零延迟

该方案通过YOLOv8的装备检测与姿态估计的动作识别,结合C#的实时管控能力,实现了从“被动巡检”到“主动预警”的转变。相比传统人工,违规响应速度提升10倍,全年可减少90%以上的安全隐患。方案已在3家制造企业落地,支持自定义违规规则(如新增“吸烟”“未系安全带”),可根据车间场景灵活扩展。需要完整的模型训练配置文件(含数据集增强脚本)或C#系统源码(视频处理+报警模块)的,评论区扣“SafetyDetect”,可直接获取部署版本~

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1175

Lua学习二

1.对于Lua而言,函数其实也是一种变量,故而系统的函数名实际上也是一种变量名: a={p=print} a.p("good") 输出good 2.函数定义,实际上是将一个类型为function的变量(整个函数chunk)赋值给一个自定义变量 3.Lua的表构造提供了一个排序函数,可以对一个表进行排序,table.sort(t,function(a,b)),此函数接受两个参数,第一个是待

oahsgnat的专栏 553

【光子 AI】AI Agent 知识体系深度研究报告

从理论基础到前沿应用:全面解析人工智能代理的核心架构、关键技术与发展趋势📅 2026 年 3 月 | 📊 深度研究报告 | 🔬 人工智能领域 | 📈 前沿技术分析**AI Agent(人工智能代理)**是一种能够感知环境、基于所获得的信息做出决策,并执行行动以影响该环境的软件系统。AI Agent 的设计旨在模仿或实现智能行为,它们可以在各种环境中操作,包括物理世界和虚拟空间。随着大语言模型(LLM)技术的突破性进展,AI Agent 正从实验室研究快速走向产业应用。根据 Gartner 发布的《2

AI天才研究院 177

Lua学习笔记二之C中调用Lua

虽然之前看过《Lua程序设计》(第二版)这本书,但对C与Lua交互的部分,一直不是很理解。最近想系统学习和深入理解C与Lua的交互(实质是想通过这个,进一步阅读Lua源码,:)),因此又看了一下这本书的第4部分,下面是在学习C中调用Lua的全局变量、table和函数的笔记以及自己的理解,其中学习过程中的写的代码可以从我的github下载。      0、Lua与C有两种交互形式。在第一种

MaximusZhou的专栏 2456

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Lua】 Lua学习笔记(二)

【Lua】Lua学习笔记(二)

FEZ98 1097

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【lua学习】学习二

【lua学习】学习二

谢健的专栏 453

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Lua学习篇②——基本语法

我有个习惯,学习一门新的语言的时候肯定要先写出最基本的“Hello World”的程序,当做一个正式开始的标志。Lua的语法其实特别简单,那么一起来编写第一个小程序来了解Lua的基本语法吧。"Hello World"小程序下载了Lua的解释器后我们可以打开cmd命令行窗口,键入lua进入Lua的交互式编程环境,如下图之后我们键入print("Hello World"),回车后控制台将输出Hello...

轩阳俊的博客 4102

Lua学习(二)

本篇继续接着上一篇博客继续记录博主学习lua的路程

m0_52021450的博客 464

lua学习二 lua如何调用库函数

microsoft Visio 2013 新建win32空项目 ----- 下一步-----选择dll和导出数据 // Win32Project1.cpp : 定义 DLL 应用程序的导出函数。 // #include "stdafx.h" #include "Win32Project1.h" #include "lua.hpp" extern "C" { #include "lua

学习笔记 1907

Lua学习二-循环

Lua学习二 lua中的循环 1.while循环体 语法 while(条件) do 循环体 end 例如:输出1-20的数字 local a=1 while(a<20) do print(a) a=a+1 end 结果 2.for循环 for循环有两种 (1)数值for循环 语法 for i=temp,temp2 do 循环体 end 其中i是局部变量,temp是数值,temp2是要到达的目标 例如:输出1-20的数字 for i=1,20 do print(i) end 结果 (2)泛

qq_45047433的博客 276

Lua学习日记二

function(函数) 在Lua中,函数是被看作“第一类值(First class Value)”。函数可以存在变量里。function可以以匿名函数(anonymous function)的方式通过参数传递。 thread(线程) 在Lua中,最重要的线程是协同程序,它跟线程差不多,拥有自己独立的栈,局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。 userdata

allen_tony的博客 290

lua堆栈操作常用函数学习二

/* ** basic stack manipulation */ LUA_API int (lua_gettop) (lua_State *L); //返回当前堆栈的大小 LUA_API int lua_gettop (lua_State *L) { return cast_int(L->top - L->base); } int   lua_gettop(lua_S

徐中海的专栏[C++] 5144

lua数据结构原理,lua基础知识学习二

1.什么是lua数据结构原理 2.为什么要有lua数据结构原理 3.如何使用lua数据结构原理,使用lua数据结构原理的不同方案比较 4.lua数据结构源码实现 5.lua数据结构关键点,重要节点,疑难杂症场景 引用 如何深入理解Lua数据结构和内存占用? - 知乎 ...

u013617851的博客 4218

Lua基础学习(二)

上一篇: Lua基础学习(一)https://blog.youkuaiyun.com/sun_zeliang/article/details/86609555   Lua函数 格式 函数类型 function 函数名称(参数1, 参数2, 参数3,..., 参数n) 执行体 return 返回值1,返回值2,返回值3,.. end 和C#还是有一点区别的,首先Lua不需要写返回值类型,...

智障侠的博客 278

lua_gc 源码学习二

普及下常识:GC 是 garbage collector 资源回收器; 初期的 Lua GC 采取的是 stop the world 的实现。一旦产生 gc 就需要期待全部 gc 流程走完。lua 自己是个很精简的体系,但不代表处理的数据量也必然很小。 从 Lua 5.1 入手下手,GC 的实现改成分步的。固然照旧是 stop the world ,可是,每个步骤均可以分阶段执行。这样,屡次搁

徐中海的专栏[C++] 4142
上一篇: Lua学习总结一
下一篇: Lua学习总结三
博士装呗
博客等级 码龄11年 63粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值