上一節(jié)對(duì)元表和元方法有了一個(gè)初步的認(rèn)識(shí),這篇就來舉個(gè)最簡單的例子吧,加深一下印象,也為后續(xù)內(nèi)容做準(zhǔn)備。
1.元方法名
Lua其實(shí)已經(jīng)規(guī)定好了各種算術(shù)操作符的元方法名字,如:
__add:加法
__sub:減法
__mul:乘法
__div:除法
__unm:相反數(shù)
__mod:取模
__pow:乘冪
只要在自定義元表的時(shí)候,給這些元方法名賦予新的函數(shù)就可以實(shí)現(xiàn)自定義操作了。
2.例子
開始舉例吧,我們新建一個(gè)自定義的元表(也就是一個(gè)table變量),用來定義一些操作:
復(fù)制代碼 代碼如下:
-- 創(chuàng)建一個(gè)元表
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
其實(shí)這和上一節(jié)的例子基本一樣,只是多說一次而已,使用方式如下:
復(fù)制代碼 代碼如下:
-- 創(chuàng)建兩個(gè)table,可以想象成是兩個(gè)類的對(duì)象
local s1 = {
name = "Hello",
sex = "boy",
};
local s2 = {
name = "Good",
sex = "girl",
};
-- 給兩個(gè)table設(shè)置新的元表
setmetatable(s1, mt);
setmetatable(s2, mt);
-- 進(jìn)行加法操作
local result = s1 + s2;
print(result);
其實(shí)我們可以把s1和s2當(dāng)成是類的對(duì)象,實(shí)際上Lua也可以模擬類的結(jié)構(gòu),目前暫時(shí)不說,配合看書的進(jìn)度~
輸出結(jié)果如下:
[LUA-print] 完美的家庭。
很簡單吧,我們可以給“類”賦予自定義的元表,改變加法、減法等算術(shù)操作。
好了,這篇有點(diǎn)短,只是作為上一篇的補(bǔ)充,或者說,換一種方式敘述而已。
您可能感興趣的文章:- Lua中的元表與元方法學(xué)習(xí)總結(jié)
- Lua中的元表(metatable)、元方法(metamethod)詳解
- 詳解Lua中的元表概念