码迷,mamicode.com
首页 > 其他好文 > 详细

LUA Learning Note 6: 元表与元方法

时间:2015-04-01 13:43:00      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

--元表:是用来存放无方法的一个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] 完美的家庭。


LUA Learning Note 6: 元表与元方法

标签:

原文地址:http://my.oschina.net/u/1773495/blog/394559

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