手游开发之lua的table 元表的运用

 

        元表在项目中的运用,其中就包括元方法这点。元方法是指__index和__newIndex,下面我总结下,更详细的例子讲解可以参考《lua程序设计 第2版》的第13章内容。长h短说,简言之有关table的查询就找__index,有关table的更新如赋值就找__newIndex,各自的运用也跟这两方面有关。

        当访问一个table中不存在的字段的时候,lua会先让解析器去查找__index元方法,若没有就返回nil,否则由__index(可能是个table,如_G;抑或是个方法function,函数调用)决定返回结果。如果不想考虑__index,可以通过rawget跳过元方法查询,rawget(t,i)是对table t 进行原始姓(raw)的访问。项目中可能有两个玩法模块用到同一份数据存储,不用访问元方法就可以调用rawget实现。

         __newindex元方法用法类似上述,唯一不同在于触发时机。当对一table不存在的索引赋值时,解析器就会查找__newindex元方法,调用它而不执行赋值操作。如果元方法是个table a,则对此table a 赋值,而非原本的table。同理可通过rawset(t,k,v)绕过元方法进行原始的设置值。

         概念理解完了,下面通过一项目实例运用加深理解。最广泛之一是只读表,相当于c++中的const性质,只能在初始化赋值,之后都不能改了,当执行写操作的时候触发错误提示。代码实现如下:

转载于:https://www.cnblogs.com/pyqLoner/p/8454586.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值