Lua基础——元方法的一些小探索

文章讲述了在Lua中关于元方法`__index`和`__add`的实验,发现`__index`对同一键的多次赋值以最后一次为准,而`__add`的调用顺序取决于传入表的顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小白学到元方法里的一些地方,突发奇想不按教程的来常规操作会得出什么结果,记录一下

1.__index

__index的值可以是一个表也可以是一个函数,尝试在表里写入同名的函数和属性,观察返回结果。

meta1={
    age=function (t,key)
        return 100
    end,
    age=200

}
meta1.__index=meta1
table1={}
setmetatable(table1,meta1)
print(table1.age)

meta1={
    age=200,
    age=function (t,key)
        return 100
    end,


}
meta1.__index=meta1
table1={}
setmetatable(table1,meta1)
print(table1.age)

仔细一回味发现,对同一个键赋值,肯定是最后一次赋值为准,可以测但没必要(呲牙笑)

2.__add

__add元方法是在两个表相加时调用的,并且有一个表有元表且有__add元方法就可以调用。

尝试对两个表都设置不同的元表且具有不同的__add元方法,观察调用的是哪个元方法。

table4={
    age=20
}
table5={
    age=21
}
setmetatable(table4,{
    __add=function(t1,t2)
        return t1.age+t2.age
    end
})
setmetatable(table5,{
    __add=function(t1,t2)
        return t1.age+t2.age+2
    end
})
print(table4+table5)    --41
print(table5+table4)    --43

结果证明,哪个表在前面就会优先调用它的元表里的__add元方法,很神奇哈

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值