lua中的各种键值的使用

在lua中提供了很多键值
这些键值有很强大的功能
下面我就一一介绍一下

__index

这个是lua的元表中最常使用的键
当你通过键来访问table的时候,如果这个键没有值,那么lua就会自动寻找这个table的metatable中的__index键
如果index中包含一个表格,lua会在表格中查询相应的值

如果__index包含一个函数的话,lua就会调用哪个函数,table的键会作为参数传递给函数
__index元方法查看表中元素是否存在,如果不存在,返回结果为nil,如果存在则由__index返回结果

mytable={"zhang","li","hua"}
mymetatable={
__index=function (tab,key)
print(tab)
--print("调用了这个方法")--访问不存在索引 可以设置为做一件事情
if key>=10 then
return "zhangzishaui"--如果有返回值 就返回返回值
end
end

}
mytable=setmetatable(mytable,mymetatable)

print(mytable)--内存位置相同
print(mytable[7])

上边的元表中的__index添加一个方法
这个方法判断键值是否大于10 如果大于10则返回 zhangzishaui
否则只会输出“调用了这个方法”

mytable={"zhang","li","hua"}
newtable={}
newtable[6]="cao"
newtable[7]="qian"
newtable[8]="tahhua"
mymetatable={
__index=newtable
}
mytable=setmetatable(mytable,mymetatable)
print(mytable[7])

在这里插入图片描述
上边就是lua的__index的使用方法

__newindex

其实这个的使用方法和__index类似
但是这个是用于修改表中数据的时候使用

总结一下就是__newindex用来对表的更新,__index用来对表的访问
当你给表的一个缺少的索引赋值,解释器就会查找__newindex的元方法
如果存在这个 则调用这个函数不进行赋值操作

mytable={"zhang","li","hua"}
mymetatable={
__newindex=function (tab,key,value)
print("调用了这个方法")--访问不存在索引 可以设置为做一件事情
print(key.."    "..value)
rawset(mytable,key,value)
end

}
mytable=setmetatable(mytable,mymetatable)

mytable[14]="df"
print(mytable[14])

上边我使用了一个rawset的函数 他是lua提供的
在这里插入图片描述

上边我通过函数 给索引为14的赋值 之后又输出索引为14的值
如果没有那句**rawset(mytable,key,value)**输出的就为nil(空)

给表添加加法操作符

在这里插入图片描述
首先给大家看一下这个对应表 之后我实现一下加法的效果
就是创建两个表 实现加法可以把两个表合并

mytable={"zhang","li","hua"}

newtable={"jin","wen","shua"}

mymetatable={
__add=function (tab,newtab)
	local mi=0;
	for k,b in pairs(tab) do
		if k>mi
			then mi=k;
		end

	end

	for k,v in pairs(newtab) do
	mi=mi+1
	table.insert(tab,mi,v)
	end

	return tab
end

}
mytable=setmetatable(mytable,mymetatable)

v=mytable+newtable

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

运行结果
在这里插入图片描述
可以看到我们把两个表合并了

同理只要我们足够熟悉lua语句就可以很灵活的使用这些运算

__call

__call元方法在lua中调用一个值的时候调用
要是不加__call元方法的时候
直接使用**table(12)**是会产生报错的

mytable={"zhang","li","hua"}

newtable={"jin","wen","shua"}

mymetatable={
__call =function (tab,arg)
print(arg)
return "zhangzishaui"
end

}
mytable=setmetatable(mytable,mymetatable)

t=mytable(234)
print(t)

这样写了之后我们运行结果就是
在这里插入图片描述
这样写之后 我们也可以使用这个方法实现给一些值赋值的效果

__tostring

__tostring元方法适用于修改表的输出行为

mytable={"zhang","li","hua"}

newtable={"jin","wen","shua"}

mymetatable={
__tostring = function(mytable)
   local str=""
   for k,v in pairs(mytable) do
   str=str..v..","

  end
  return str
  end
}
mytable=setmetatable(mytable,mymetatable)


print(mytable)

运行结果
在这里插入图片描述

上边就是所有关于lua的元方法
希望我所写的对大家有帮助 如果有什么问题可以联系我
主页有我的联系方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值