1

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

> 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)而不是每次都写出一个循环。可以这样做吗?

4

2 回答 2

3

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

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

于 2012-10-12T17:21:23.070 回答
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}}
于 2012-10-13T14:41:49.153 回答