根据 Lua 手册,setmetatable 的工作方式仍然与 Lua 5.0 相同。然而由于某种原因,当我在 Lua 5.1.5 和 5.3.1 中尝试此代码时,似乎未访问元表:
ClassTable = {}
ClassTable.getString = function(self)
return self.x .. ""
end
inst = {}
setmetatable(inst, ClassTable)
inst.x = 7
--doens't work
assert(getmetatable(inst) == ClassTable)
print(inst:getString())
第一种情况有效,但是在第二种情况下,我收到错误提示未使用元表:
./lua: /test.lua:12: attempt to call method 'getString' (a nil value)
stack traceback:
test.lua:12: in main chunk
[C]: ?
这也与方法调用运算符“:”无关,因为即使获取方法的值也不会转到元表。
print(inst.getString)
nil