博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MetaTable 和 MetaMethod
阅读量:4984 次
发布时间:2019-06-12

本文共 1232 字,大约阅读时间需要 4 分钟。

MetaTable:为表元素重载操作符__add(a, b) 对应表达式 a + b__sub(a, b) 对应表达式 a - b

__mul(a, b)                     对应表达式 a * b__div(a, b)                     对应表达式 a / b__mod(a, b)                     对应表达式 a % b__pow(a, b)                     对应表达式 a ^ b__unm(a)                        对应表达式 -a__concat(a, b)                  对应表达式 a .. b__len(a)                        对应表达式 #a__eq(a, b)                      对应表达式 a == b__lt(a, b)                      对应表达式 a < b__le(a, b)                      对应表达式 a <= b__index(a, b)                   对应表达式 a.b__newindex(a, b, c)             对应表达式 a.b = c__call(a, ...)                  对应表达式 a(...) 例:

ta1 = {x = 1, y = 2}

ta2 = {x = 3, y = 4}

--实现tab1+tab2 = {x=4, y=6}

ta = {}

function ta.__add(t1, t2)
temp = {}
temp.x = t1.x + t2.x
temp.y = t1.y + t2.y
return temp
end
setmetatable(ta1, ta)
setmetatable(ta2, ta)
print((ta1+ta2).x, (ta1+ta2).y)

注:setmetatable为lua库函数,用于重载lua中的操作符

     实现重载的方法(用空表定义,表成员函数)将方法绑定到需要执行的表上

 

   

错误认知

ta1 = {x = 1, y = 2, __add}

ta2 = {x = 3, y = 4, __add}

--实现tab1+tab2 = {x=4, y=6}

function add(t1, t2)

temp = {}
temp.x = t1.x + t2.x
temp.y = t1.y + t2.y
return temp
end

ta1._add = add

ta2._add = add
print((ta1+ta2).x, (ta1+ta2).y)

转载于:https://www.cnblogs.com/ad-1990/p/4121377.html

你可能感兴趣的文章
多线程学习笔记五之读写锁实现分析
查看>>
linux内核分析(网课期末&地面课期中)
查看>>
Spring中的设计模式2
查看>>
vue项目向小程序迁移调研
查看>>
Jquery权威指南
查看>>
CSS hack大全(转)
查看>>
ZOJ - 3229 Shoot the Bullet (有源汇点上下界最大流)
查看>>
【14】redis
查看>>
蓝桥杯/第四届/猜年龄
查看>>
LeetCode-Letter Combinations of a Phone Number
查看>>
关于ubuntu的图形界面的关闭与开启
查看>>
Codeforces Round #400 E. The Holmes Children
查看>>
hdu 1759 Matrix Revolution(矩阵转BFS)
查看>>
LintCode-88.最近公共祖先
查看>>
WCF
查看>>
861. Score After Flipping Matrix
查看>>
青蛙的约会(扩展欧几里德)
查看>>
380. Insert Delete GetRandom O(1)
查看>>
6w5:第六周程序填空题2
查看>>
多线程——几中常用的线程池
查看>>