2012-10-12 52 views
1

我有一個簡單的問題:我想要使lua中的print函數打印一個表的內容,而不僅僅是單詞「table」和一個內存地址。例如:lua超載表__tostring函數

> 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

僅供參考:'print'主要用於調試目的。如果您需要認真處理打印數據,則需要使用正確的IO例程。 –

+0

@NicolBolas關心「適當的IO例程」嗎? – ewok

回答

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}}