1

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)最初の例のような結果が返されないのはなぜですか?

4

2 に答える 2

5

このprint関数はtostring、引数を文字列に変換するために使用します。

tostringテーブルで呼び出され、テーブルのメタテーブルに__tostringフィールドがtostringある場合、テーブルを引数として対応する値を呼び出し、呼び出しの結果を結果として使用します。

luaxmlには、__tostringから返されたテーブルにそのようなメタメソッドがあるのではないかと思いますxml.eval(s)

于 2010-08-21T04:35:45.607 に答える
0

__tostringこの結果を取得するために、テーブルのメタテーブルで関数を定義できます。そのテーブルを print() に渡すと、メタテーブルに__tostring関数がある場合、print() はデフォルトのメソッド (テーブルのメモリ アドレスを出力するだけ) を使用する代わりに、その関数を評価した結果を出力します。

于 2010-08-21T04:37:22.453 に答える