【Lua基础系列】__newindex元方法


  明天你的电瓶就不见      73   
  2021-01-14      Lua      

【Lua基础系列】__newindex元方法

大家好,我是Lampard~~
欢迎来到Lua进阶系列的博客
前文再续,书接上一回。今天和大家讲解一下lua中的__newindex元方法

(一)什么是_newindex

如果说__index 字段是在访问表中不存在的值(get) 是执行的操作的话
那么__nexindex 字段则是在对表中不存在的值进行赋值(set) 时候执行的操作(记住i是小写)
在这个时候可能有人吐槽:纳尼!!我天天给表创建新字段,咋不见得有执行什么__newindex呢?
确实,如果没有元表,或者元表中没有__newindex字段,那给表新建一个字段则不会执行其他多余的操作

【Lua基础系列】__newindex元方法 - 第1张

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

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

【Lua基础系列】__newindex元方法 - 第2张

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

【Lua基础系列】__newindex元方法 - 第3张

我们可以看到,当我们输出myTable.c时,lua是找不到这个值的,因为实际上是给__nexindex指向的yourTable给赋值 。那为什么还是nil呢?从结果我们可以看到,其实这个3我们是赋值给了yourTable.c, 虽然yourTbale已经被赋值,但是访问是__index字段的事 ,myTable并不能访问得到yourTable的值。
总结来说,就是只要存在__nexindex字段,那么就不会对本表新建值。
那么这个__newindex字段有何作用呢?其实它可以起到一个 很好的限制筛选作用。可以防止表被赋值 ,加入些杂七杂八的元素。有时候一表多用可能会导致些lua中的垃圾回收相关的问题。

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

作者:Lampard1997

ps:以上是【Lua基础系列】__newindex元方法全部内容,希望文章能够帮你解决【Lua基础系列】__newindex元方法所遇到的游戏开发问题。
本文收录在 游戏编程 🕹️ - 学习Lua专题,分享走一走~

 基础   

猜你喜欢 全系列


您可以在登录后,发表评论




    关于作者
    游戏开发者 - 86
  • 明天你的电瓶就不见
  • 码神
  • 540 文章  √   3 提问  ?
    此作者缺少注释。


    目录