--元表:是用来存放无方法的一个table.
--table和userdata可以各种拥有独立的元表。
但是,其他类型的值就只能共享其类型所属的元表,比如,数字,所有的数字都共用一个元表。
--元方法:用来进行table 类型变量进行特殊操作的一个方法。
--Lua其实已经规定好了各种算术操作符的元方法名字:_add,_sub,_mul,_div,_unm,_mod,_pow.
--使用步骤:
-- 创建一个元表
local mt = {};
mt.__add = function(t1, t2)--添加元方法。
print("两个table相加的结果就是...神经病啊!table有什么好相加的啊!");
end
local t1 = {};
local t2 = {};
-- 给两个table设置新的元表
setmetatable(t1, mt);
setmetatable(t2, mt);
-- 进行加法操作
local result = t1 + t2;
--a.创建一个新的table变量时,它是不存在元表的(可以用getmetatable函数获取某个对象的元表,就能知道这个对象有没有元表存在了)。
--b.在Lua中,只能设置table的元表,其他类型的值的元表,只能通过C代码来完成。
--自定义元方法:
-- 创建一个元表
local mt = {};
mt.__add = function(s1, s2)
local result = "";
if s1.sex == "boy" and s2.sex == "girl" then
result = "完美的家庭。";
elseif s1.sex == "girl" and s2.sex == "girl" then
result = "哦呵呵";
else
result = "蛇精病"
end
return result;
end
-- 创建两个table,可以想象成是两个类的对象
local s1 = {
name = "Hello",
sex = "boy",
};
local s2 = {
name = "Good",
sex = "girl",
};
-- 给两个table设置新的元表
setmetatable(s1, mt);
setmetatable(s2, mt);
-- 进行加法操作
local result = s1 + s2;
print(result);
[LUA-print] 完美的家庭。