专业编程基础技术教程

网站首页 > 基础教程 正文

lua setmetatable使用 lua_settable

ccvgpt 2024-10-23 09:31:43 基础教程 7 ℃

setmetatable使用场景

当我们想对lua table实现一些运算符重载时可通过setmetatable来做到,也就是说setmetatable可以增加table的操作,让一些操作更容易。

setmetatable使用方法

setmetatable有两个参数,第一个参数是需要进行运算符重载的table,第二个参数是metatable,包含各个运算符重载的实现逻辑。

lua setmetatable使用 lua_settable

setmetatable使用实战

假如我们想实现两个table相加返回一个新的table,新的table是两个table所有值的集合,即如下运算:

{1, 2} + {3, 4, 5} = {1, 2, 3, 4, 5}

对应代码如下:

local t = {1,2}                                                                                                                             
setmetatable(t,{__add=function(t1, t2)                                                                                                      
    local res = {}                                                                                                                          
    for _, v in ipairs(t1) do                                                                                                               
            res[#res+1] = v                                                                                                                 
        end                                                                                                                                 
    for _, v in ipairs(t2) do                                                                                                               
            res[#res+1] = v                                                                                                                 
    end                                                                                                                                 
    return res                                                                                                                          
end                                                                                                                                 
})                                                                                                                                          
for k, v in ipairs(t + {3, 4, 5}) do                                                                                                        
    print("["..k.."]: "..v)                                                                                                                 
end 

输出如下:

[1]: 1                                                                                                                                      
[2]: 2                                                                                                                                      
[3]: 3                                                                                                                                      
[4]: 4                                                                                                                                      
[5]: 5

Tags:

最近发表
标签列表