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