【发布时间】:2020-03-29 13:09:40
【问题描述】:
我在一个旨在模仿类的表元表中重载了这样的乘法运算符。
function classTestTable(members)
members = members or {}
local mt = {
__metatable = members;
__index = members;
}
function mt.__mul(o1, o2)
blah. blah blah
end
return mt
end
TestTable = {}
TestTable_mt = ClassTestTable(TestTable)
function TestTable:new()
return setmetatable({targ1 = 1}, TestTable_mt )
end
TestTable t1 = TestTable:new()
t2 = 3 * t1 -- is calling mt.__mul(3, t1)
t3 = t1 * 3 -- is calling mt.__mul(t1, 3)
如何检查函数 mt.__mul(o1, o2) 的函数调用中哪个参数属于 TestTable 类型?
我需要知道这一点才能正确实现重载乘法。
【问题讨论】:
-
你可以通过查看
getmetatable(o1)和getmetatable(o2)来推断操作数的类型 -
谢谢.. 比较 getmetatable(o1) == members 帮助了我。
标签: lua arguments operator-overloading meta-method