lua 元方法 __index

原方法 __index:

作用用于访问元表中的内容。即当通过键来访问table时,如果这个键没有值,则lua会寻找该table中的 metatable 中的__index键。如果__index指向的是一个able,则lua会在__index指向的table中查找相应的键

Lua 查找一个元表的规则:

1、在表中查找,如果找到,则返回该键指向的值。如果找不到则继续

2、判断该表是否存在元表,如果没有,则返回nil。 如果有元表则继续

3、判断元表中是否存在__index 方法,如果 __index不存在则返回nil。如果__index 方法是一个table,则重复1、2、3. 如果__index 方法是一个函数,则返回该函数的值

1 -- 如果键值不存在则返回 0
2 mtb = setmetatable({},{__index=function(mtable,key)
3         return 0
4     end
5 })


-- 获取指定键的值,如果不存在该键则创建改建并赋给默认值0
mtb = setmetatable({},{__index=function(mtable,key)
        print("I'm here")
        rawset(mtable,key,0)
    end
})

print(mtb.key)
print(mtb.key)

 

原方法 __newindex:

与 __index 不同的是,__newindex 是用来对表进行更新的。

当对表不存在的一个key(索引)赋值时,解释器会查找 __newindex 元方法;如果存在则调用这个函数而不进行赋值操作。

-- 对一个表的键进行赋值,如果不存在该键值则插入键并且赋给用户指定的值
tb = setmetatable({}, {__newindex=function(bb,key,value )
    rawset(bb,key,value)
end})
元方法说明
__add对应运算符“+”
__sub对应运算符“-”
__mul对应运算符“*”
__div对应运算符“/"
__mod对应运算符"%"
__unm对应运算符"-"
__concat对应运算符".."
__eq对应运算符"=="
__lt对应运算符"<"
__le对应运算符"<="

 

 

 

 

 

 

 

 

这里的原方法与 C++中的运算符重载类似,不过在lua里面原方法的使用更加灵活

其他方法:

__call :当元组调用一个值时,进行调用

__tostring:  类似与 C# 中的 ToString 方法,用于改变元组输出的行为

转载于:https://www.cnblogs.com/pmsl/p/7419765.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值