__tostring自定义类Lua

时间:2019-07-02 12:14:32

标签: lua tostring metatable

以下代码应打印'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)

有效。这似乎很奇怪,因为对我而言,构造函数中的selfTestClass:引用同一张表。

1 个答案:

答案 0 :(得分:1)

您的TestClass:new接受两个参数,并且在创建t时仅调用一个参数。

更改:

local t = TestClass.new{}

收件人:

local t = TestClass:new{}

由于此self调用中的TestClass:new现在引用了TestClass,而不是空表(很可能是该类的新实例)。 / p>

如有疑问,请参阅Lua Reference Manual §3.4.10this stackoverflow question