我有一个简单的问题:我想让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)
而不是每次都要写出一个循环时才会发生。可以这样做吗?
答案 0 :(得分:3)
您需要在您创建的每个表上设置__tostring()。更简单的方法是使用漂亮的打印技术。
答案 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}}