【问题标题】:Print a table without metatables in Lua在 Lua 中打印没有元表的表
【发布时间】:2017-10-05 23:20:49
【问题描述】:

是否可以在 Lua 中不使用元表来打印表格?

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

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

【问题讨论】:

  • “打印表格”是什么意思?您的意思是在表格中打印每个键和值吗?您是否也想在子表中打印键和值?在 Lua 中没有打印表格的“标准”方式,所以答案取决于你到底想做什么。
  • 获取一些序列化程序并打印其输出。

标签: lua lua-table metatable


【解决方案1】:

没有元表就无法做到。


函数print 总是调用tostring 来格式化它的输出。

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

对于表,tostring(t) 将查找它是否具有元方法 __tostring,并将其用作结果。所以最终,你仍然需要一个元表。

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

【讨论】:

  • __tostring 可以是t 中的一个字段,如果您调用setmetatable(t,t)
猜你喜欢
  • 2018-05-19
  • 2021-04-05
  • 2019-03-10
  • 2019-09-03
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2013-04-08
相关资源
最近更新 更多