关于lua元方法,其实个人理解,简单来说就是:
1.在调用table不存在的字段时,会调用__index元方法。
下面简单写一段代码来示范一下:
local myTable={
dog="狗狗",
}
local fun={
_index=function(table,key)
print("这里没有你要的东西哟,不过我知道你要找:"..key);
end
}
//设置元方法
setmetatable(myTable,fun);
print(myTable.cat);
输出如下:
这里没有你要的东西哟,不过我知道你要找:cat
nil
当我们调用myTable.cat时,发现myTable里面没有这个字段,因此调用元方法fun得到此打印结果。
2.当调用了不存在的字段时,就会调用table元表里的__index元方法,如果这个__index元方法也是一个table的话,就会在这个table里查找字段,并调用。
local myTable={
dog="狗狗",
}
local fun={
_index={
cat="猫猫"
}
}
//设置元方法
setmetatable(myTable,fun);
print(myTable.cat);
输出如下:
猫猫
当我们调用 myTable.cat时,发现myTable里面没有这个字段,然后调用元方法fun,发现元方法是一个table,因此到table里面查找这个字段,发现cat字段是:猫猫
个人理解元方法就是这个意思,不外乎就是在当我们调用table里面不存在的字段时的一个特殊处理罢了,