Следующий код должен напечатать '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:
ссылаются на одну и ту же таблицу.