Lua中使用元表(metatable)執(zhí)行算術(shù)類元方法實(shí)例
上一節(jié)對(duì)元表和元方法有了一個(gè)初步的認(rèn)識(shí),這篇就來(lái)舉個(gè)最簡(jiǎn)單的例子吧,加深一下印象,也為后續(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變量),用來(lái)定義一些操作:
-- 創(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é)的例子基本一樣,只是多說一次而已,使用方式如下:
-- 創(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] 完美的家庭。
很簡(jiǎn)單吧,我們可以給“類”賦予自定義的元表,改變加法、減法等算術(shù)操作。
好了,這篇有點(diǎn)短,只是作為上一篇的補(bǔ)充,或者說,換一種方式敘述而已。
相關(guān)文章
Lua中編譯執(zhí)行代碼相關(guān)的函數(shù)詳解
這篇文章主要介紹了Lua中編譯執(zhí)行代碼相關(guān)的函數(shù)詳解的相關(guān)資料,需要的朋友可以參考下2015-04-04Lua學(xué)習(xí)筆記之函數(shù)、變長(zhǎng)參數(shù)、closure(閉包)、select等
這篇文章主要介紹了Lua學(xué)習(xí)筆記之函數(shù)、變長(zhǎng)參數(shù)、closure(閉包)、select等,本文著重講解了這些特性的用法,并給出代碼實(shí)例,需要的朋友可以參考下2015-04-04實(shí)現(xiàn)Lua中數(shù)據(jù)類型的源碼分享
在Lua中有8種基礎(chǔ)類型,像其他動(dòng)態(tài)語(yǔ)言一樣,在語(yǔ)言中沒有類型定義的語(yǔ)法,每個(gè)值都攜帶了它自身的類型信息。下面我們就來(lái)嘗試通過Lua 5.2.1的源碼來(lái)看類型的實(shí)現(xiàn)2015-04-04Lua編程示例(二):面向?qū)ο?、metatable對(duì)表進(jìn)行擴(kuò)展
這篇文章主要介紹了Lua編程示例(二):面向?qū)ο?、metatable對(duì)表進(jìn)行擴(kuò)展,本文直接給出實(shí)例代碼,需要的朋友可以參考下2015-07-07