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

表的行为与相应事件如下: