__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)
有效。这看起来很奇怪,因为对我来说,构造函数中的 self
和 TestClass:
指的是相同的 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。
下面的代码应该打印 '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)
有效。这看起来很奇怪,因为对我来说,构造函数中的 self
和 TestClass:
指的是相同的 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。