lua 元方法

mac2022-06-30  21

原方法 __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

最新回复(0)