__tostring 自定义 类 Lua

__tostring in custom classes Lua

下面的代码应该打印 'hello',但是它打印的是 table 的内存位置(即 '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: 指的是相同的 table.

您的 TestClass:new 有两个参数,而您在创建 t 时只用一个参数调用它。

变化:

local t = TestClass.new{}

至:

local t = TestClass:new{}

多亏了这个 TestClass:new 调用中的 self 现在引用 TestClass 而不是空的 table ,这(很可能)意味着是新的class.

的实例

如有疑问请参考Lua Reference Manual §3.4.10 or this Whosebug question