为什么在调用print(sometable)时,Lua中的某些表显示不同?

时间:2010-08-21 04:16:55

标签: lua lua-table

当我使用luaxml解析XML字符串时,我看到的行为让我感到困惑。 Lua doc声明在表变量上调用print():

print(type(t))  
print(t)

会产生如下输出:

t2:        table  
t2:        table: 0095CB98

然而,当我使用luaxml时:

require "luaxml"

s = "<a> <first> 1st </first> <second> 2nd </second> </a>"  
t = xml.eval(s)

print("t:       ", type(t))  
print("t:       ", t)  

我得到以下输出:

t:        table  
t:        <a>  
  <first>1st</first>    
  <second>2nd</second>  
</a>  

为什么print(t)不会返回看起来像第一个示例的结果?

2 个答案:

答案 0 :(得分:5)

print函数使用tostring将其参数转换为字符串。

当使用表调用tostring并且表的metatable具有__tostring字段时,tostring将表作为参数调用相应的值,并使用结果呼叫作为结果。

我怀疑luaxml在__tostring返回的表上有这样一个xml.eval(s)元方法。

答案 1 :(得分:0)

您可以在表的metatable上定义函数__tostring以获得此结果。当您将该表传递给print()时,如果在metatable上有__tostring函数,print()将输出评估该函数的结果,而不是使用默认方法(仅打印内存地址)表)。