lua重载表__tostring函数

时间:2012-10-12 17:16:59

标签: printing lua

我有一个简单的问题:我想让lua中的print函数打印表的内容,而不仅仅是单词“table”和内存地址。例如:

> tab = {}
> tab[1]="hello"
> tab[2]="there"
> 
> print(tab)
table: 0x158ab10
--should be 
1   hello
2   there

我知道我可以通过执行以下操作来获得此效果:

for i,v in pairs(tab) do print(i,v) end

但是我希望它只是在我执行print(tab)而不是每次都要写出一个循环时才会发生。可以这样做吗?

2 个答案:

答案 0 :(得分:3)

您需要在您创建的每个表上设置__tostring()。更简单的方法是使用漂亮的打印技术。

请参阅此链接:http://lua-users.org/wiki/TableSerialization

答案 1 :(得分:1)

您可以通过覆盖全局tostring()函数来执行此操作。这是print()调用其论点的内容。

如果您不想进行任何编码,请试用Steve Donovan的Microlight库。您可以按如下方式使用它:

tostring = require "ml".tstring
tab = {"abc", 3.14, print, key="value", otherkey={1, 2, 3}}
print(tab) --> {"abc",3.14,function: 0x7f5a40,key="value",otherkey={1,2,3}}