Lua学习总结三

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

1.Lua中的模块

Lua学习到这里的时候我们产生一个疑问,Lua的代码是怎么写的呢?全都写在一个文件中吗?显然不可能。那样的话耦合度也太高了吧?

Lua中为我们提供了模块的功能,类似于C#中的命名空间,我们在Lua代码中引入模块,就可以调用模块中的公有变量或函数了,相当于提供了API接口。

实际上,模块的本质是一个table,只是table中放的是变量和函数,那么我们定义模块的方法就很简单了:

mymodule={}		--模块的本质是一个table

mymodule.num=1		--声明了一个公有变量

mymodule.str="str"	--声明了一个公有变量

local a=2			--声明了私有变量

local str2="str"	--声明了私有变量

function mymodule.getstr()		--声明了公有函数
	return mymodule.str,str2
end

local function getnum()		--声明了私有函数,私有函数声明时直接写出函数名即可,
								--不能像公有函数那样 模块名.函数名()来声明
								--否则会运行报错
	return mymodule.num,a
end

return mymodule

我们在另一个lua脚本中使用该模块:

require "mymodule"		--引入模块,引号中填入的应该是文件名,而不是定义模块时的模块名
						--为了减少出错,我们可以在定义模块的时候模块名和文件名同步

print(mymodule.num)		--调用模块中的公有变量
print(mymodule.str)		--调用模块中的公有变量

print(mymodule.a)		--调用模块中的私有变量
print(mymodule.str2)	--调用模块中的私有变量



print(mymodule.getstr())	--调用模块中的公有函数
print(mymodule.getnum())	--调用模块中的私有函数

运行结果:

Lua学习总结三

公有变量可以正常获取,私有变量获取不到,公有函数可以正常调用,私有方法的调用直接报错。

2.Lua中的元表

Lua中引入了元表的概念,我的理解是:普通表可以根据其元表中定义的行为来对表中的元素进行处理,说白了就是元表为该普通表提供了自定义的方法扩展。

比如对于表,我们想要挨个输出表中的元素,现阶段只能使用for循环,但是我们能不能使用更简单的方法呢?而不是每次挨个输出都要经历for循环。我们学习了元表,可以自定义一个功能行为来解决这个问题。

在Lua中可以使用下面的方法来设置元表和获取元表:

tab1={1,2,3.4,5}
tab2={"a","b","c"}

metatab1={}

setmetatable(tab1,metatab1)		--将metatab1表设置为tab1表的元表,返回值为tab1
getmetatable(tab1)				--获取tab1表的元表,返回值为tab1的元表

我们知道普通表里面放正常的数据,那么元表里面放什么呢?答案是:元方法

__index原方法:当访问普通表中不存在的键时的处理方法:

这个方法是最常用的元方法,__index既可以是一个表,也可以是一个匿名函数,当__index为表时,我们访问了普通表中不存在

教程 | 基于遥感生态指数(RSEI)模型的生态环境质量评价 使用数据:Landsat8 OLI数据,行列号:122036,时间:20210527。 使用软件:ENVI5.3、ArcGIS10.2 二、4个指数计算 下述的四个指数的计算均是通过ENVI软件中的Band math工具进行计算。 (1)绿度指数 在常用的植被指数当中,归一化植被指数 ( NDVI) 能够有效地反映植被的生长情况与植被 覆盖度等重要植被的物理性质,检测灵敏度高,能 够较为真实地展现区域的地表空间变化规律,已经得到广泛利用,本文采用 NDVI 指数来代表绿度指数。 在ENV 阅读详情

相关推荐

21、博弈中的对抗搜索算法解析

本文深入解析了博弈中的对抗搜索算法,涵盖极小极大算法、阿尔法-贝塔剪枝、移动排序与换位表等核心技术。文章分析了算法的数学基础与实现机制,探讨了其在国际象棋、围棋等复杂游戏中的应用,并扩展至多人游戏中的联盟与合作行为。通过对比不同类型策略的优劣,展示了对抗搜索在实际博弈系统中的演进方向与优化路径,为人工智能决策提供了理论支持与实践指导。

rust6ferris的博客 112

一个lua文件如何调用另一个lua文件的变量?

进来在学习春哥的OpenResty,个人对lua也不怎么熟练,难免会碰到很多奇奇怪怪的问题,这里就稍微记录下碰到的一些小问题,以供他人参考。 上网搜相关资料,大多数资料都只是说调用lua的require或者dofile,并且详细说命它们的区别,不是说没用,只是没有回答我的问题...

chouzu8463的博客 7100

【RT-DETR涨点改进】小目标检测、特征融合改进篇 | TGRS 2024 | RT-DETR引入CSFM上下文选择融合模块,适合多模态检测、红外小目标检测、小目标检测、遥感目标检测等任务有效涨点

本文提出了一种改进RT-DETR目标检测模型的方法,通过引入上下文选择融合模块(CSFM)显著提升复杂背景下小目标和低对比度目标的检测精度。CSFM模块采用多尺度特征融合和动态特征选择机制,有效增强模型的全局上下文感知能力,同时保留细节特征。该模块通过通道减少机制和空间信息调节,实现从粗到细的特征聚合,减少误报并提高轮廓检测精度。实验表明,改进后的RT-DETR模型在多个基准测试中表现优异,计算效率与检测精度均优于现有方法。文章还详细介绍了模块配置和yaml文件修改方法,为模型部署提供指导。

Ai缝合怪、助力小伙伴高效发论文 1631

lualua之间的调用及对表的访问

最近做的一个项目对lua使用的需求比较多,其中之一就是lualua之间的调用。比如说1.lua脚本文件需要调用2.lua及3.lua中的内容,这个时候只需要在1.lua中这样写即可。dofile("2.lua"); dofile("3.lua");这里需要注意的是所包含lua

书山有路勤为径 4183

另一个.lua文件中的全局变量可以被其它.lua文件读取

如果在module.lua 中定义了一个全局变量 global_val = 5 那么在其它的文件中 require “module.lua” 后可以使用 global_val 这个全局变量,它的值就是5

wm6274的博客 5417

lua传"值"和传"引用"

例子一 x = 1 y = x y = 10 print(x) 输出:1 例子二 function change(x) x = 10 end y = 1 change(y) print(y) 输出:1 例子 x = "test" y = x x = "show" print(y) 输出:test 例子四

和尚的专栏 1万+

LuaLua学习笔记(

LuaLua学习笔记(

FEZ98 597

lua学习()

lua有了个初步的了解, 同事按捺不住在项目上面用了一下c api. 由于大家都不熟lua的 c api, 我也去学习一下. 这样大家可以讨论了. 5.1的 luaopen_io()不能用了, 用了一下直接挂掉. 查了一下官方的文档, 他没有说清楚.只是说不能直接调用. 不明白 而且看了一下, lua_open()宏最好由 luaL_newstate()来代替.首先试了一下对 全局变量的读取.w

AOL's Web Log 4578

lua学习

确保某些数据是符合预期的,避免影响最终结果。:assert(条件语句,报错信息)当条件语句为true时,assert语句不会有任何行为,但是当为false时,assert会将报错信息弹出,并中断程序的执行。:由于断言只在调试模式下有效,因此在生产环境中通常会被禁用,以避免影响程序性能‌。

weixin_40453090的博客 948

学习Lua 基本语法

Lua 学习起来非常简单,我们可以创建第一个 Lua 程序!

m0_72864708的博客 145

lua学习

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34184158的博客 99

Lua学习

function norm (x,y) --n = x^2 + y^2 local n = x^2 + y^2 return n end --[[ print(norm(1,2)) print(n) --]] 观察局部与q

MyObject-C的专栏 401

、一起学习Lua 基本语法

Lua学习起来非常简单,我们可以创建第一个Lua程序!

m0_66404702的博客 123

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

继续学习Lua与C交互,下面是在学习Lua中调用C定义函数的笔记以及自己的理解,其中学习过程中的写的测试代码可以从我的GitHub下载。      0、对于能被Lua调用的C函数,必须注册这个C函数,以便用某种适当的方式将函数地址告诉Lua。当Lua调用C函数时,使用了与C调用Lua函数时相同的栈。C函数从栈中获取函数参数,并将结果压入栈中。为了在栈中将函数结果与其他值区分,C函数

MaximusZhou的专栏 2614

Lua学习笔记

Lua学习笔记 2008.7.14 修正了 main 函数里 注册新Lua函数时候的一个笔误,感谢 mayao11 指出以上错误:) 2008.5.20 修正了 小结 里关于 lua_pop(L,-1)的错误,应该为lua_pop(L,1),感谢 aslucky  指出以上错误。 首先提一下:元旦只放一天假,比较悲惨。不过可以继续研究Lu

Chinamming的专栏 945

lua_gc 源码学习

我们晓得,lua 对外的 API 中,统统个 gc 打交道的都经过lua_gc。C 说话构建体系时,普通不讲计划模式。但模式仍是存在的。若要按《计划模式》中的分类,这应当归于 Facade 形式。代码在 lapi.c 的 895 行: LUA_API int lua_gc (lua_State *L, int what, int data) { int res = 0; global_Stat

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

Lua基础学习()

上一篇: Lua基础学习(二) https://blog.csdn.net/sun_zeliang/article/details/86644551   Lua迭代器 泛型 for 迭代器 泛型 for 在自己内部保存迭代函数,实际上它保存个值:迭代函数、状态常量、控制变量。 泛型 for 迭代器提供了集合的 key/value 对,语法格式如下: for k,v in pairs...

智障侠的博客 333

Lua 基本语法的学习

Lua 学习起来非常简单,我们可以创建第一个 Lua 程序!

m0_46413639的博客 117

仿各大APP种树微信小程序源码下载-简单快速上手

这是一款仿各大APP的种树获取水果的一款微信小程序可以对树浇水,杀虫,修剪等等另外还有夺宝,更多小程序推荐支持流量主模式等等

MinGW 64位 gcc 4.9.2

MinGW64位版本4.9.2,默认编译出来是64位的,下载解压就可以直接使用,需要将MinGW的bin路径加到系统环境变量PATH里。

上一篇: Lua学习总结二
下一篇: unity问题三:场景加载的问题
博士装呗
博客等级 码龄11年 63粉丝 30原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值