LUA Learning Note 6: 元表與元方法

--元表:是用來存放無方法的一個table. 函數

--table和userdata能夠各類擁有獨立的元表。
可是,其餘類型的值就只能共享其類型所屬的元表,好比,數字,全部的數字都共用一個元表。 spa

--元方法:用來進行table 類型變量進行特殊操做的一個方法。 對象

--Lua其實已經規定好了各類算術操做符的元方法名字:_add,_sub,_mul,_div,_unm,_mod,_pow. get

--使用步驟: io

    -- 建立一個元表
    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函數獲取某個對象的元表,就能知道這個對象有沒有元表存在了)。
table

--b.在Lua中,只能設置table的元表,其餘類型的值的元表,只能經過C代碼來完成。 function

--自定義元方法: 變量

    -- 建立一個元表
    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); meta

[LUA-print] 完美的家庭。
方法

相關文章
相關標籤/搜索