2017-05-08 84 views
1

是否可以在Lua中打印表格而不使用metatables?在功能print中总是调用tostring来格式化它的输出。但是,如果我在我的桌子覆盖tostring,然后我得到以下结果:在Lua中打印没有metatables的表格

> a = {} 
> a.tostring = function() return "Lua is cool" end 
> print(a) 
table: 0x24038c0 
+0

你是什么意思“打印表”?你的意思是在表格中打印每个键和值吗?你是否想在子表中打印键和值?在Lua中没有打印表格的“标准”方式,所以答案取决于你想要做什么。 –

+0

获取一些序列化器并打印其输出。 – FareakyGnome

回答

7

它不能没有metatable来完成。


功能print总是调用tostring格式化它的输出。

您误会了这一点。这里,tostring是函数tostring,而不是表的字段。所以这意味着print(t)将叫print(tosstring(t)),就是这样。

对于表格,tostring(t)然后会找到它是否有metamethod __tostring,并使用它作为结果。所以最终,你仍然需要一个metatable。

local t = {} 
local mt = {__tostring = function() return "Hello Lua" end} 
setmetatable(t, mt) 
print(t) 
+2

如果你调用'setmetatable(t,t)','__tostring'可以是't'中的一个字段。 – lhf