【Lua基础系列】__newindex元方法

本文是Lua进阶系列博客,主要讲解了Lua中的__newindex元方法。__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中的垃圾回收相关的问题。

 

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

本文章已经生成可运行项目
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值