Lua的元方法学习

在使用加法操作时,会查找__add元方法,那么,在调用table不存在的字段时,会调用__index元方法,这是一样的规则。

大家要记住这句话:__index用于查询,__newindex用于更新。

当调用了子表t1不存在的XXXX字段时,就会调用t1元表里的__index元方法,并且会传递table和字段名两个参数。

当试图给t1的sayHello字段赋值时,Lua判定sayHello字段是不存在的,所以会去调用元表里的__newindex元方法。

__newindex元方法被调用的时候会传入3个参数:table本身、字段名、想要赋予的值。

总结__newindex的规则:

a.如果__newindex是一个函数,则在给table不存在的字段赋值时,会调用这个函数。
b.如果__newindex是一个table,则在给table不存在的字段赋值时,会直接给__newindex的table赋值。

通过rawget函数可以忽略元表的__index功效,纯粹地从子表t1中调用字段。

猜你喜欢

转载自yangkd548.iteye.com/blog/2274906