在 Lua 中打印没有元 table 的 table
Print a table without metatables in Lua
是否可以在 Lua 中不使用 metatable 来打印 table?
在 Roberto 的书 Programming in Lua 中,他提到了 "The function print
always calls tostring
to format its output"。但是,如果我在 table 中覆盖 tostring
,则会得到以下结果:
> a = {}
> a.tostring = function() return "Lua is cool" end
> print(a)
table: 0x24038c0
没有 metatables 是做不到的。
The function print
always calls tostring
to format its output.
你误会了。这里,tostring
是函数tostring
,不是table的字段。那么意思就是print(t)
会调用print(tosstring(t))
,就是这样。
对于 tables,tostring(t)
将查找它是否具有元方法 __tostring
,并将其用作结果。所以最终,你仍然需要一个 metatable.
local t = {}
local mt = {__tostring = function() return "Hello Lua" end}
setmetatable(t, mt)
print(t)
是否可以在 Lua 中不使用 metatable 来打印 table?
在 Roberto 的书 Programming in Lua 中,他提到了 "The function print
always calls tostring
to format its output"。但是,如果我在 table 中覆盖 tostring
,则会得到以下结果:
> a = {}
> a.tostring = function() return "Lua is cool" end
> print(a)
table: 0x24038c0
没有 metatables 是做不到的。
The function
tostring
to format its output.
你误会了。这里,tostring
是函数tostring
,不是table的字段。那么意思就是print(t)
会调用print(tosstring(t))
,就是这样。
对于 tables,tostring(t)
将查找它是否具有元方法 __tostring
,并将其用作结果。所以最终,你仍然需要一个 metatable.
local t = {}
local mt = {__tostring = function() return "Hello Lua" end}
setmetatable(t, mt)
print(t)