在Lua中打印不带元表的表

在Lua中打印不带元表的表,lua,lua-table,metatable,Lua,Lua Table,Metatable,在Lua中不使用元表就可以打印表吗 在Roberto的《Lua编程》一书中,他提到“函数print总是调用tostring来格式化其输出”。但是,如果在表中重写tostring,则会得到以下结果: > a = {} > a.tostring = function() return "Lua is cool" end > print(a) table: 0x24038c0 如果没有元表,这是不可能做到的 函数print始终调用tostring格式化其输出 你误解了这一点。这里

在Lua中不使用元表就可以打印表吗

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

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

如果没有元表,这是不可能做到的


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

你误解了这一点。这里,
tostring
是函数,而不是表的字段。所以它的意思是,
print(t)
将调用
print(t))
,就是这样

对于表,
tostring(t)
随后将查找它是否有一个metamethod
\uu tostring
,并将其作为结果使用。所以最终,您仍然需要一个元表

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

如果没有元表,这是不可能做到的


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

你误解了这一点。这里,
tostring
是函数,而不是表的字段。所以它的意思是,
print(t)
将调用
print(t))
,就是这样

对于表,
tostring(t)
随后将查找它是否有一个metamethod
\uu tostring
,并将其作为结果使用。所以最终,您仍然需要一个元表

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

“打印表格”是什么意思?您的意思是在表中打印每个键和值吗?是否也要打印子表中的键和值?在Lua中打印表没有“标准”方法,因此答案取决于您到底想做什么。获取一些序列化程序并打印其输出。您所说的“打印表”是什么意思?您的意思是在表中打印每个键和值吗?是否也要打印子表中的键和值?在Lua中打印表没有“标准”的方法,因此答案取决于您想要做什么。获取一些序列化程序并打印其输出。
\uuuu-tostring
可以是
t
中的一个字段,如果调用
setmetatable(t,t)
\uu-tostring
可以是
t
中的一个字段,如果调用
setmetatable(t,t)