Chinaunix首页 | 论坛 | 博客
  • 博客访问: 504168
  • 博文数量: 118
  • 博客积分: 2575
  • 博客等级: 大尉
  • 技术积分: 1263
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-27 09:37
文章分类

全部博文(118)

文章存档

2017年(11)

2016年(8)

2015年(1)

2014年(9)

2013年(7)

2012年(38)

2011年(14)

2010年(18)

2009年(12)

分类: 嵌入式

2014-09-01 14:41:53

table对象有metatable。metatable中的方法控制在特定情况下的行为,如
    控制算术运算与逻辑运算的
    控制字符串打印的__tostring及连接操作符..的__concat
    控制length操作符#的__len
    控制被调用时的__call
    控制访问不存在的域__index, __newindex。

一般情况下,玩的最多的就是__index域,因为这也是基于protocol的继承机制。__index metamethod即可以是一个函数,也可以是一个表。

默认值例子的说明
    默认值可以存在每个表的metatable中,这样每个表的metatable都不一样。
    默认值直接存在每个表的某个域中,这样,所有的表都可以共享metatable。但是这样,缺少值就不可以共享了。
    默认值按照table为key保存在一个单独的table中,这样,所有的表都可以共享metatable与default值。

监控与代理表的说明
    基本原理是给用户返回一个proxy table,proxy table的__index与__newindex方法做尽功课之后,再访问原表。
    proxy table引用原表的方法与前面默认值的保存比较类似。
          每个proxy table都有一个不同的metatable,这样随便保存(包括使用upvalue也可以)。
          共享metatable,把原表保存在proxy table中(只要使用一个不冲突的域就可以了)。
   
阅读(904) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~