lua笔记二

Lua菜鸟教程学习笔记二(一些细节) 内容会持续更新,有错误的地方欢迎指正,谢谢! 前言 上一篇文章:Lua菜鸟教程学习笔记一(基本语法和数据类型)介绍了Lua的基本用法,但缺少一些细节的内容,本文会补充一些细节。 正文 Lua 变量 Lua 循环 Lua 流程控制 Lua 函数 Lua 运算符 Lua 字符串 Lua 数组 Lua 迭代器 Lua table(表) ... 阅读详情
  1. 表与表的运算
  2. 抽象表的创建与继承
--[[
require "model"		--把公有的代码放在一个文件夹,可以以API的方式在其他地方调用,相当于引用命名空间

print(model.var);
model.han();

--model.fun1();		--local函数相当于 私有不可调用

fun2();				--可直接调用模块里的函数 和参数名字
print(b);
--]]


--[[
mytable={"c#","lua","java"} --普通表
mymetatable={}				--元表
print(mytable)

mytable=setmetatable(mytable,mymetatable)[1];		--调用表内第一个值返回

print(mytable)

print(mymetatable)
print(getmetatable(mytable))

--]]
--[[

mytable={"java","lua","c#"}

settable={
__index=function()							--当键所对应的值不存在时调用 __index;制定函数就 调用,指定表则更 新表
	return "noll";						    --当查找没有的键时;
end
};

mytable=setmetatable(mytable,settable);


print(mytable[10]);

--]]

--[[

mytable={"java","lua","c#"}


settable={

	__newindex=function(tab,key,value)		--当给一个没有的索引赋值时,调用__newindex
	rawset(tab,key,value);
	end

};

mytable[10]="45";
print(mytable[10]);

--]]


--[[

mytable={"java","lua","c#"}



newtable={"newtable"};


settable={

	__newindex=newtable				--当修改一个新的索引时,调用__newindex

};
mytable=setmetatable(mytable,settable);
newtable[1]="ff";
newtable[5]="gg"
newtable[112]="45";
print(mytable[112]);
print(mytable[1]);
print(mytable[5]);

--]]


--[[
mytable={"java","lua","c#"}

myset={
	__add=function(tab,newtable)
		local mi=0;
		for v,k in pairs(tab) do
			if(v>mi) then
				mi=v;
			end
		end
		print(mi,#tab);
		for v,k in pairs(newtable) do
			mi=mi+1;
			table.insert(tab,mi,k);
		end
		return tab;
	end

}
mytable=setmetatable(mytable,myset);
newtable={"newtable"};


v1=mytable+newtable;

for k,v in pairs(mytable) do
	print(k,v);
end
--]]


--[[
mytable={"java","lua","c#"}

myset={
	__add=function(tab,newtable)			  --表与表的运算
		local mi=0;
		for v,k in pairs(tab) do
			if(v>mi) then
				mi=v;
			end
		end
		print(mi,#tab);
		for v,k in pairs(newtable) do
			mi=mi+1;
			table.insert(tab,mi,k);
		end
		return tab;
	end,								    --表里两个函数用,隔离

	__call=function(tab,s1,s2,s3)			--__call当把这个表当作一个函数来用时;
	print(s1+s2+s3);

	end,

	__tostring=function(mytable)			--__tostring当把一个表当作字符串来使用输出时
		str=""
		for k,v in pairs(mytable) do
			str=str..v.."\n";
		end

		return str;

	end

}
mytable=setmetatable(mytable,myset);
newtable={"newtable"};

print(mytable(123,34,340));

print(mytable);


--]]

--[[

co=coroutine.create(						--create创建,resume继续,启动
	function(a,b)

		print(coroutine.status(co));		--调用时runn
		print(coroutine.running());
		print(a+b)

		coroutine.yield();
		print(2);
		print(coroutine.status(co));
		print(coroutine.running());
		return a/b;						--create创建会先return ture/false

	end

)
print(coroutine.status(co));				--调用前暂停(函数外不会是运行的)
print(coroutine.running());
s1,s2,s3=coroutine.resume(co,20,50);		--调用协程 函数
print(s1,s2,s3);


po=coroutine.wrap(							--wrap包裹,调用的格式要不一样;
	function(a,b)
		print(a-b)
		coroutine.yield(a/b);				--yield可以return参数
		print(a+b)
		return a/b;						--wrap创建会return
	end

);

res1,res2,res3=po(20,30);
print("siki")
print(res1,res2,res3)
--po();

coroutine.resume(co,50,60);					--第二次调用co
print(coroutine.status(co));				--函数结束return后函数dead

--]]

--[[
file=io.open("x2.txt","r+");
--io.input(file);
--io.output(file);							--设置file为默认输出文件

--file:write("\n6666");
print(file:read())							--完全模式(不用设置文件流,要关闭)
file:close()
--print(io.read("*l"));

--print(io.read());
--io.close(file);




file =io.open("x2.txt","a+");				--以读写的方式打开txt;
--io.output(file);							--设置file为默认输出文件

--io.write("\n6666");

io.input(file);								--设置file为默认输入文件
print(io.read())

io.close(file);


--]]

--[[

tab={"apple","org","banana"};

print(collectgarbage("count"))

tab=nil;

print(collectgarbage("count"))

print(collectgarbage("collect"))

print(collectgarbage("count"))

--]]



--person={name="siki"}

--[[
person.eat=function ()
	print(person.name.."在吃饭");
end


person.eat()

--]]

--[[
function person:eat()
	print(self.name.."sss")
end
--]]
--[[
a=person;
a:eat();						--通过:定义方法可以持有当前table为self
--person:eat();

--]]
---------------------------------------------------------------
--[[

Person={name="siki"}					--抽象类

function Person:eat()					--在table表里 定义一个key eat;的函数
	print(self.name.."eat dinner");
end
										--持有当前table为self(构造函数)
function Person:new()					--再新建一个key new函数
	t={};								--函数值为t表 ,定义一个虚表,设置为t表的元表
	setmetatable(t,{ __index=self})		--设置self为index__,有self是指定表则更新表
	return t							--调用new 就是t,t为空,不存在时调用元表index,等于调用self
end

person=Person:new();					--继承抽象类
print(person.name)

person.name="bb";						--更新父类元素值

print(person.name)

t.kk="kk";
print(t.kk);
print(Person.kk)

v1={"c1"};
v2={"c2"};

v1=setmetatable(v1,{__newindex=v2})			--__newindex是v2,调用v1时如果没有就掉用v2 查找或者更新

--v1.kk="kk";
print(v1.kk)
print(v2.kk)

--]]
--[[

Person={name="siki"}					--抽象类

function Person:eat()					--在table表里 定义一个key eat;的函数
	print(self.name.."eat dinner");
end
										--持有当前table为self(构造函数)
function Person:new(o)					--再新建一个key new函数
	t=o or {};								--函数值为t表 ,定义一个虚表,设置为t表的元表
	--setmetatable(t,{ __index=self})		--设置self为index__,有self是指定表则更新表

	setmetatable(t,self);			    --设置Persono
	self.__index=self;					--设置修改的表为person

	return t							--调用new 就是t,t为空,不存在时调用元表index,等于调用self
end

person=Person:new({kk="cc"});					--继承抽象类
print(person.name)
print(person.kk)

--]]
----------------------------------------------------------------

Person={name="siki",age="66"}
function Person:new(o)
	local t=o or {}
	setmetatable(t,{__index=self})		--查找
	return t;
end

Student=Person:new();
Student.jj="jj";
print(Student.jj);
print(Person.jj)
Student.grade=2;
Teacher=Person:new();
Teacher.Title="seniorTea";


stu1=Student:new();
tea1=Teacher:new();


stu1.bb="kk";
print(stu1.bb)
print(Person.bb)
print(stu1.grade);
print(tea1.Title)





开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)综述 综上,大多数工作均基于CLIP预训练的图像编码器和文本编码器。GlIP为解决目标检测任务提供了先例,后续很多工作常与目前较为广泛使用的目标检测网络结构相结合,从而构建新的开放词汇目标检测器。如ViLD基于Mask R-CNN、RegionCLIP基于R-CNN、VLDet和BARON基于Faster R-CNN。更具有创新性的工作是Detic,提出了使用图像分类的数据集来对目标检测器的分类头进行训练。 阅读详情

相关推荐

kemeas算法继续优化——elkan kmeas算法

题记:又是凌晨3点的夜 elkan kmeans算法 在我的上一篇博客《kmeans算法性能改进_kmeans++算法+kmeans++优化算法+距离计算优化》中,在一般kmeans算法的基础上,添加了对于初始条件和距离计算更上的一些优化技巧。这篇博客聊一聊elkan算法,其实也是对于kmeans运行速度的优化算法。主要作用与kmeans的距离计算过程。 原理 假如我们已经知道任意两个样本之间的距离,再假设我们已经知道了样本1与聚类中心1之间的距离,根据三角性两边之和大于第三边,c+d>a,所以如果

铁血军的小博客 7065

LUA快速使用指南

Lua在葡萄牙语中是月亮的意思,是一个有效的轻量级的可嵌入式脚本语言。它支持面向对象和面向过程的编程方式。从1993年被开发出来至今已经有25岁的高龄了。老当益壮,不坠青云之志,Lua仍然非常地活跃,比如深度学习的开源框架Torch就使用Lua和C作为开发的主要语言。 曾经在游戏开发者杂志的编程工具分类获得2011年的Front Line Award奖项,Lua得到了很高的评价:Lua成为了...

知行合一 止于至善 1万+

测试丢包_电信IPRAN承载LTE业务丢包故障处理案例

银川 景旭阳电信IPRAN承载LTE业务丢包故障处理案例一.故障现象某地市IPRAN网络承载LTE基站业务,客户反馈近期丢包严重,基站侧ping侧核心网EPC丢包达到10%左右;且基站数量在10个左右,并分布在同一地区,需要IPRAN网络协助排查;随后查看了IPRAN网络;发现这些业务所在基站的PW-BFD历史告警存在频繁的UP/DOWN告警;综上信息展开故障处理,初步判断由于BFD频繁...

weixin_29740921的博客 1912

Lua学习笔记-1

Lua 简介 Lua也是一种脚本语言,和Shell类似。学习这个是因为在使用Redis做分布式锁的时候有一种Lua的写法,所以就简单的学习一下这个脚本语言。 Lua的安装 可以参考菜鸟教程的安装步骤:安装教程。这里的安装方式其实是源码安装,就是把源码下载下来自己编译一遍。如果是Linux新手或者macos新手,注意两点内容: 1:在使用curl下载源码的时候,最好新建一个目录,因为curl会把下载下来的文件放在当前目录下。 2:执行make Install 的时候可能会出现Permission Denied

JustDreamer的博客 355

开关电源设计实战:如何用AP值快速选型磁芯(附计算公式推导)

本文为开关电源工程师提供了基于AP值的磁芯快速选型实战指南。文章深入解析了AP值作为磁芯‘功率吞吐量’指标的核心物理意义,并通过详细的公式推导和24W反激电源设计实例,手把手演示如何利用AP值计算公式,结合电流密度、窗口利用率等关键参数,从众多磁芯型号中高效筛选出合适型号,同时强调了选型后的关键校验步骤与常见误区。

weixin_29234239的博客 875

智能车图像处理11-进阶篇3--中线累积差值的统计

中线累积差值的统计在后面判断小S,以及长直道的时候都有用到,关键点在于中线的跳变 第12 - 13 行:comulants1 和comlants2代表的是两种不同的累差,取的行数不同 第14-17 行:comulants2取6到25行,其实就是My_Abs(LCenter[i], LCenter[i - 1])的累加 第18-21 行:comulants1去第1到40行 第27- 行: 计算了一下右线的开始于最终结束行,这里判断R_black是否为0,是和中线的提取中g

taiyuezyh的博客 3827

一款无root抓包工具 AndroLuaJ

介绍一款安卓端不需要root的抓包工具,demo.apk。主要讲述它怎么为全局设置代理,尽管GitHub(地址在文末)上讲得很清楚,但是我觉得就是还有一两个不懂怎么处理。既然是为coder写的文章,那就废话不多说直接上图。文末获取链接 主界面: 步骤一: 步骤二: 步骤三: 步骤四: 步骤五: 标题之后选择刚刚创建的接入点,此后访问的所有信息都会经过它。可以通过 ...

Lilylie的博客 5831

为什么 ADT 在 SAP BTP ABAP environment 里认证成功却无法登录 Service Instance:根因拆解与一站式修复路线

摘要 ADT报错"认证成功但Service Instance登录失败"通常源于ABAP租户的权限或用户映射问题,而非账号密码错误。常见原因包括:1) ABAP租户内未创建对应业务用户;2) 业务用户缺少开发角色(如SAP_BR_DEVELOPER);3) BTP角色集合未分配或IdP组映射缺失;4) 浏览器会话混淆身份;5) 连接了非开发租户(如Customizing Tenant);6) 实例休眠导致误判。 解决方法:检查ABAP业务用户及角色分配,确认BTP角色集合映射,使用隐身窗口

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 254

linux环境下以非root权限安装lua

1、下载资源 在以下网站中下载所用的源代码 http://www.lua.org/download.html http://ftp.gnu.org/gnu/readline/ http://ftp.gnu.org/pub/gnu/ncurses/ 2、安装readline、ncurses ./configure --prefix=$path // 指定安装目录 make make insta...

wymyimeng的博客 1539

移动机器人路径规划中噪声环境下的鲁棒性测试仿真

设计一个二维或三维环境模型,包括静态障碍物和可能存在的动态障碍物。

amy_mhd的博客 126

Serial RapidIO Gen2 IP 说明(三)

前言 继续接着上篇文章,介绍Serial RapidIO Gen2 IP 的具体端口信息。 一、端口描述 1、缓冲设计接口 2、物理层接口 参考说明 【1】Serial RapidIO Gen2 v4.1https://china.xilinx.com/content/dam/xilinx/support/documentation/ip_documentation/srio_gen2/v4_1/pg007_srio_gen2.pdf ...

记录所学,分享知识,结识挚友 1321

Linux 下获取Root权限的几种方法

方法分为永久性获取root权限以及非永久性获取Root权限 非永久性获取Root权限: 非永久性获取Root权限可以在我们要键入的命令之前加上sudo前缀。 如我们要键入的命令是: rm ,以Root用户执行的方式就是: sudo rm 这样在每个需要Root权限的命令之前都需要键入一次sudo非常不方便,如何在一个会话中永久的获取root权限呢? 永久性获取Root权限: 第一种方法是: 先临时的获取到root权限,使用root权限更改root用户的密码。然后利用su命令键入我们刚刚更改过的root密码就

weixin_52358334的博客 2477

PyRoki 入门教程(二)安装与使用

PyRoki是一个用于机器人运动学优化的Python库,具有模块化设计、可扩展性和跨平台支持等特点。它支持逆运动学、轨迹优化和动作重定位等任务,采用Levenberg-Marquardt优化器提高效率。主要功能包括:基于URDF的可微分正向运动学模型、自动生成碰撞基元、通用成本因子和自定义成本函数等。PyRoki支持CPU、GPU和TPU运行,适用于从单机器人到大规模并行处理场景。目前存在一些限制,如仅支持软约束、静态形状和特定关节类型等。官方提供了多个应用示例,包括基础逆运动学、碰撞检测、轨迹优化和手部/

机器人控制与仿真应用 1252

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

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

MaximusZhou的专栏 2456

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【Lua】 Lua学习笔记(二)

【Lua】Lua学习笔记(二)

FEZ98 1097

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Lua 笔记(二)

Lua 变量 变量声明 赋值语句 索引 Lua 循环 循环类型 while 循环 for 循环 数值for循环 泛型for循环 repeatuntil 循环 无限循环 控制语句 Lua流程控制 Lua控制结构语句Lua 变量变量声明变量在使用前,必须在代码中进行声明,即创建该变量 告诉编译器,为语句创建相应的储存区,用于存放变量。 Lua 的变量有三种:全局变量,局部变量,表中变量 Lua 中

alex_deblog的博客 298

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Lua学习笔记二--在Lua中使用自己的C函数收藏

  Lua学习笔记二--在Lua中使用自己的C函数收藏 新一篇: Lua学习笔记三--表的应用 | 旧一篇: Lua学习笔记一 function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d

skyremember的专栏 2008

Lua学习笔记二

Lua学习笔记二 在Lua中使用自己的C函数     OK,上次我们掌握了如何在Lua脚本中编写一个函数,并在C文件中接应它。 现在让我们来学习另外一种交互方式。 本节的目的:在Lua脚本中调用自己写的函数。侧重点为自己编写可以被Lua脚本使用的C函数的规则。    啥都不说了,RTFS   -------以下是Lua脚本-------- --test.lua Lu

Chinamming的专栏 995

Lua笔记二(xlua)

Xlua官网 https://github.com/Tencent/xLua 一、xLua的导入和hotfix的配置 1.首先在github上下载好xlua插件,解压后有一个xLua-master文件,打开里面的Assets文件夹,将其里面的文件全部复制粘贴到自己的Unity工程项目里面(放在自己工程的Assets目录下) 2.配置热更新的宏:在Unity...

Mickey丶笑风沙 482

Lua学习笔记(二)

四、表达式 1、算数操作符       除了基本的“+ - * /”,Lua中特殊的在于“^”表示指数运算;“%”取模可用于任何实数(而非C中仅限整型)。 a=8^(1/3) --计算8的1/3次 10.3%4    --等于2.3 其中“%”是根据以下规则定义的: a%b=a-floor(a/b)*b      --floor是向下取整函数       故对于小数取模有一些特别的用

u012480018的博客 1692

学习Lua笔记(二)

1.在lua中一旦循环条件设定,下面对循环变量的更改,不会对结果造成影响(避免这种情况出现) for i=1,10,2 do i=i+100 print(i) end --101,103,105,107,109 dic = {name = "lanou",age = 18} print(#dic) --0 (1)lua中的foreach的

GaoHeShun的博客 942

Lua复习笔记(二)

局部变量与全局变量 一.声明: 局部变量: local 变量名 全局变量:直接声明 二.作用域 局部变量: 声明的语句块 全局变量:全局 *语句块声明:do end 三.调用速度 局部变量:快 全局变量:慢 *当在语句块里面声明与全局变量同名的局部变量时,优先调用局部变量 *不管是局部变量还是全局变量类型都是可以改的 do local a=5; print(a); a=“6666” pri...

qq_37352181的博客 197

lua 字符串包含_「Lua语言教程笔记②」Lua基本语法

Lua是一种动态语言,不需要定义变量的类型,直接赋值即可Lua语言有8个基本类型,如下图数据类型描述nil这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。boolean包含两个值:false和true。number表示双精度类型的实浮点数string字符串由一对双引号或单引号来表示function由 C 或 Lua 编写的函数userdata表示任意存储在变量中...

weixin_39689297的博客 1616

Lua学习笔记二--在Lua中使用自己的C函数

 我不知道优快云把笔记二弄哪去了,这是第2次写的东西。Lua学习笔记二在Lua中使用自己的C函数  OK,上次我们掌握了如何在Lua脚本中编写一个函数,并在C文件中接应它。现在让我们来学习另外一种交互方式。本节的目的:在Lua脚本中调用自己写的函数。侧重点为自己编写可以被Lua脚本使用的C函数的规则。  啥都不说了,RTFS -------以下是Lua脚本

踏入神的领域 5934
上一篇: lua自学基础1
下一篇: xlua基础
RootTimeYu
博客等级 码龄9年 4粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值