在Lua中不使用元表打印表格

是否有可能在Lua中不使用元表打印表格?

在Roberto的书《Lua编程》中,他提到:“函数print总是调用tostring来格式化其输出”。但是,如果我覆盖了我的表中的tostring,那么我会得到以下结果:

> a = {}
> a.tostring = function() return "Lua is cool" end
> print(a)
table: 0x24038c0
点赞
用户1009479
用户1009479

不使用元表是无法做到。


函数 print 始终调用 tostring 来格式化其输出。

您误解了这一点。在此处,tostring 是函数 tostring,而不是表中的字段。因此,它的意思是 print(t) 会调用 print(tostring(t)),就这样。

对于表,tostring(t) 将找到它是否具有元方法 __tostring,并将其用作结果。因此,最终您仍然需要元表。

local t = {}
local mt = {__tostring = function() return "Hello Lua" end}
setmetatable(t, mt)
print(t)
2017-05-08 04:49:10