以下代码应打印'hello',但是它正在打印表的内存位置(即'table:052E67D0')。请在这里解释我所缺少的。
TestClass = {}
function TestClass:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
function TestClass:__tostring()
return "hello"
end
local t = TestClass.new{}
print(t)
尝试这样做:
TestClass = {}
function TestClass:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
self.__tostring = function() return "hello" end
return o
end
local t = TestClass.new{}
print(t)
有效。这似乎很奇怪,因为对我而言,构造函数中的self
和TestClass:
引用同一张表。
答案 0 :(得分:1)
您的TestClass:new
接受两个参数,并且在创建t
时仅调用一个参数。
更改:
local t = TestClass.new{}
收件人:
local t = TestClass:new{}
由于此self
调用中的TestClass:new
现在引用了TestClass
,而不是空表(很可能是该类的新实例)。 / p>
如有疑问,请参阅Lua Reference Manual §3.4.10或this stackoverflow question。