在 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)