码迷,mamicode.com
首页 > Web开发 > 详细

Lua metatable & metamethod

时间:2016-07-07 12:30:08      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

Lua metatable & metamethod

  Lua中的每个值都有一套预定义的操作集合,比如数字是可以相加的,字符串是可以连接的,但是对于两个table类型,则不能直接进行“+”操作。这需要我们进行一些操作。在Lua中有一个元表,也就是上面说的metatable,我们可以通过元表来修改一个值得行为,使其在面对一个非预定义的操作时执行一个指定的操作。比如,现在有两个table类型的变量a和b,我们可以通过metatable定义如何计算表达式a+b,具体的在Lua中是按照以下步骤进行的:

  1. 先判断a和b两者之一是否有元表;
  2. 检查该元表中是否有一个叫__add的字段;
  3. 如果找到了该字段,就调用该字段对应的值,这个值对应的是一个metamethod;
  4. 调用__add对应的metamethod计算a和b的值。

  Lua在创建新的table时不会创建元表

  技术分享

  可以使用setmetatable去设置一个table或userdata类型变量的元表

  技术分享

  在table中,我可以重新定义的元方法有以下几个:

  技术分享

参考:http://www.jellythink.com/archives/511

Lua metatable & metamethod

标签:

原文地址:http://www.cnblogs.com/tekkaman/p/5649585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!