Lua 元表和元方法之算术运算相关元方法

本文介绍了Lua中的元表概念,通过setmetatable和getmetatable函数展示了如何设置和获取元表。元表可以用于定义自定义的算术运算行为,如通过__add元方法实现两个表的合并。示例中展示了如何定义一个元表,设置表的元表,并利用元表实现表的加法操作,最后输出了合并后的结果。

setmetatable  设置/修改任意元表

getmetatable  获取元表

Lua语言中的每一个值都可以有元表。每一个表和用户数据类型都具有各自独立的元表,而其他类型的值则共享对应类型所属的同一个元表。Lua语言在创建新表时不带元表:

function ToString(t)
    local str = "";
    for i, v in pairs(t) do
        str = string.format("%s %s ",str,v);
    end
    return str;
end

local t = {1,2,3}
local t1 = {}
print(getmetatable(t))      --> nil
-- 把 t 设置为 t1 的元表
setmetatable(t1,t)
print(getmetatable(t1) == t)      --> true
print(ToString(getmetatable(t1)))      --> 1 2 3

算术运算符元方法

每种算术运算符都有一个对应的元方法。加法__add、乘法 intersection,减法(__sub)、除法(__div)、floor除法(__idiv)、负数(__unm)、取模(__mod)和幂运算(__pow)。类似地,位操作也有元方法:按位与(__band)、按位或(__bor)、按位异或(__bxor)、按位取反(__bnot)、向左移位(__shl)和向右移位(__shr)。我们还可以使用字段__concat来定义连接运算符的行为。

-- 两个表相加 实现
function Add(a,b)
    local result = {}
    for i, v in ipairs(a) do
        table.insert(result,v);
    end
    for i, v in ipairs(b) do
        table.insert(result,v);
    end
    return result;
end

-- 定义一个元表
Set = {};
--- 设置加法元方法
Set.__add = Add;       

local testArr = {1,2,3,4,5,6}
setmetatable(testArr,Set);          --设置元表
local testArr1 = {7,8,9}
setmetatable(testArr1,Set);         --设置元表
local result = testArr + testArr1; 
print(ToString(result));            --> 1,2,3,4,5,6,7,8,9

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值