Lua中使用元表(metatable)執(zhí)行算術類元方法實例
上一節(jié)對元表和元方法有了一個初步的認識,這篇就來舉個最簡單的例子吧,加深一下印象,也為后續(xù)內容做準備。
1.元方法名
Lua其實已經規(guī)定好了各種算術操作符的元方法名字,如:
__add:加法
__sub:減法
__mul:乘法
__div:除法
__unm:相反數
__mod:取模
__pow:乘冪
只要在自定義元表的時候,給這些元方法名賦予新的函數就可以實現自定義操作了。
2.例子
開始舉例吧,我們新建一個自定義的元表(也就是一個table變量),用來定義一些操作:
-- 創(chuàng)建一個元表
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
其實這和上一節(jié)的例子基本一樣,只是多說一次而已,使用方式如下:
-- 創(chuàng)建兩個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);
其實我們可以把s1和s2當成是類的對象,實際上Lua也可以模擬類的結構,目前暫時不說,配合看書的進度~
輸出結果如下:
[LUA-print] 完美的家庭。
很簡單吧,我們可以給“類”賦予自定義的元表,改變加法、減法等算術操作。
好了,這篇有點短,只是作為上一篇的補充,或者說,換一種方式敘述而已。
相關文章
Lua學習筆記之函數、變長參數、closure(閉包)、select等
這篇文章主要介紹了Lua學習筆記之函數、變長參數、closure(閉包)、select等,本文著重講解了這些特性的用法,并給出代碼實例,需要的朋友可以參考下2015-04-04Lua編程示例(二):面向對象、metatable對表進行擴展
這篇文章主要介紹了Lua編程示例(二):面向對象、metatable對表進行擴展,本文直接給出實例代碼,需要的朋友可以參考下2015-07-07