Lua语言之元表(metatable),元方法详解

(1):元表作为一个表,可以拥有任意类型的键值对,其真正对被设置的表的影响是Lua规定的元方法键值对。
(2):这些键值对就是Lua所规定的键,比如__index,__add,__concat等等。这些键名都是以双下划线__为前缀。其对应的值则为一个函数,被称为元方法(metamethod),
(3):这些元方法定义了你想对表自定义的操作。如:__index键,在Lua中它所对应的元方法执行的时机是当查找不存在于表中的键时应该做的操作

如下:
child仅设置元表father,则father.__index = nil
仅有元表,此时元表的__index为nil,将使得以下输出为 nil 男孩

local father = {}
father.name = "zhangsan"
local child = {}
child.sex = "男孩"
setmetatable(child,father)--仅有元表,此时元表的__index为nil,将使得以下输出为 nil 男孩
print(child.name)
print(child.sex)

在这里插入图片描述
为元表的__index赋值,使得father.__index = father,则变成
有元表,__index有值,指向一张表father,将使得child在自己表中找不到name,去__index指向的father中找

local father = {}
father.name = "zhangsan"
local child = {}
child.sex = "男孩"
father.__index = father--为__index赋值
setmetatable(child,father)--有元表,__index有值,指向一张表father,将使得child在自己表中找不到name,去__index指向的father中找
print(child.name)
print(child.sex)

在这里插入图片描述
总结:
Lua查找一个表元素的规则可以归纳为如下几个步骤:
Step1:在表自身中查找,如果找到了就返回该元素,如果没找到则执行Step2;
Step2:判断该表是否有元表(操作指南),如果没有元表,则直接返回nil,如果有元表则继续执行Step3;
Step3:判断元表是否设置了有关索引失败的指南(__index元方法),如果没有(__index为nil),则直接返回nil;如果有__index方法是一张表,则重复执行Step1->Step2->Step3;如果__index方法是一个函数,则返回该函数的返回值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值