Lua 即使使用了setmetatable,Metatable也没有索引
根据Lua手册,setmetatable的工作原理与Lua5.0中的相同。然而,出于某种原因,当我在Lua5.1.5和5.3.1中尝试这段代码时,似乎无法访问元表:Lua 即使使用了setmetatable,Metatable也没有索引,lua,lua-table,metatable,lua-5.1,lua-5.3,Lua,Lua Table,Metatable,Lua 5.1,Lua 5.3,根据Lua手册,setmetatable的工作原理与Lua5.0中的相同。然而,出于某种原因,当我在Lua5.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(getmetatab
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
要使表
inst
访问元表,您需要使用元方法\uu index
因此,您可以通过在下面的ClassTable.getString
definition顶部添加这一行来更正代码:
ClassTable.__index = ClassTable
尽管名称不同,_索引元方法也有相同的功能
不需要是函数:它可以是表。当它是一个
函数,Lua调用它,表和缺席键作为它的
论据。当它是一个表时,Lua将重做对该表的访问