当我使用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)
不会返回看起来像第一个示例的结果?
答案 0 :(得分:5)
print
函数使用tostring
将其参数转换为字符串。
当使用表调用tostring
并且表的metatable具有__tostring
字段时,tostring
将表作为参数调用相应的值,并使用结果呼叫作为结果。
我怀疑luaxml在__tostring
返回的表上有这样一个xml.eval(s)
元方法。
答案 1 :(得分:0)
您可以在表的metatable上定义函数__tostring
以获得此结果。当您将该表传递给print()时,如果在metatable上有__tostring
函数,print()将输出评估该函数的结果,而不是使用默认方法(仅打印内存地址)表)。