【Lua基础系列】__newindex元方法

                           【Lua基础系列】__newindex元方法

大家好,我是Lampard~~

欢迎来到Lua进阶系列的博客

前文再续,书接上一回。今天和大家讲解一下lua中的__newindex元方法

(一)什么是_newindex

如果说__index字段是在访问表中不存在的值(get)是执行的操作的话

那么__nexindex字段则是在对表中不存在的值进行赋值(set)时候执行的操作(记住i是小写)

在这个时候可能有人吐槽:纳尼!!我天天给表创建新字段,咋不见得有执行什么__newindex呢?

确实,如果没有元表,或者元表中没有__newindex字段,那给表新建一个字段则不会执行其他多余的操作

(二)__newindex字段存在两种情况

(1)__nexindex指向一个函数

如果__newindex字段指向一个函数,则给表创建一个新字段的时候,则会执行该函数,且对本表创建不成功

(2)__nexindex指向一个表

如果__newindex字段指向一个表,那么就会对该表创建这个字段,且对本表创建不成功。

我们可以看到,当我们输出myTable.c时,lua是找不到这个值的,因为实际上是给__nexindex指向的yourTable给赋值。那为什么还是nil呢?从结果我们可以看到,其实这个3我们是赋值给了yourTable.c, 虽然yourTbale已经被赋值,但是访问是__index字段的事,myTable并不能访问得到yourTable的值。

总结来说,就是只要存在__nexindex字段,那么就不会对本表新建值。

那么这个__newindex字段有何作用呢?其实它可以起到一个很好的限制筛选作用。可以防止表被赋值,加入些杂七杂八的元素。有时候一表多用可能会导致些lua中的垃圾回收相关的问题。

好,今天的分享就到这里,祝各位功力渐长平步青云,谢谢大家~~

经验分享 程序员 微信小程序 职场和发展