2017-05-08 27 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