
ZHZY
[Lua]从元表到面向对象 - 元表
>>
完整版
本帖最后由 ZHZY 于 2013-7-13 19:38 编辑
=534=好吧 看不到Lua分类果然有淡淡的忧桑QAQ
原创教程 根据个人经验所得← ←求纠错
元表这个东西啊,很神奇的说
[一点也不神奇(摔)]
通过元表,小的来说,我们可以给表定义行为,例如a+b,a..b这样的操作符;大了来说,我们可以设置表的索引(__index)来达到面向对象的效果甚至可以写一个完整的类(class)机制
关于元表,个人给出的定义如下:
如果一个表能对另一个或多个表的行为或方法进行定义,那么这个表就是另一个或多个表的元表(metatable)1.元表可以说是两个表在行为上的关系(- -微妙的字眼),只能是表和表之间的关系;
2.一个表可以设置其元表,也可以成为其它单个或多个表的元表;
3.如果一个表需要被设置为元表,表中需要有元方法才能起到元表的效果.
设置元表和获取元表方法如下:
setmetatable(table,metatable) | 设置表的元表 |
getmetatable(table) | 获取表的元表 |
举一个例子(- -代码框没有Lua语言求补救)
[mw_shl_code=cpp,true]metatable = {} -- 元表
theTable = {} -- 表
-- 设置theTable的元表为metatable
setmetatable(theTable,metatable)
print(metatable)
print(getmetatable(theTable)) -- 获取theTable的元表并输出地址[/mw_shl_code]
这样的话,我们就给theTable设置了元表,但是元表中没有任何元方法,设置了它根本没有效果=3=
元表中的行为定义方式基本为:
metatable[event] = function(xxx) xxx end
其实就是将一些下标赋值为function,当发生这些行为的时候会调用这些函数.
当然如果行为没有被定义你就等着error把23333
表的行为与相应事件如下: