2017-05-08 9 views
1

Luaでメタテーブルを使用せずにテーブルを印刷することはできますか? Luaのでロベルトの本プログラミングでLuaでメタテーブルのないテーブルを印刷

、彼は「機能printは常にその出力をフォーマットするtostringを呼び出す」に言及しています。これは、メタテーブルなしで行うことはできません

> a = {} 
> a.tostring = function() return "Lua is cool" end 
> print(a) 
table: 0x24038c0 
+0

「テーブルを印刷する」とはどういう意味ですか?テーブル内の各キーと値を印刷することを意味しますか?キーと値をサブテーブルにも印刷しますか? Luaにテーブルを印刷する "標準的な"方法はないので、答えはあなたが何をしたいのかによって異なります。 –

+0

シリアライザを取得し、その出力を表示します。 – FareakyGnome

答えて

7

:私は私のテーブルにtostringをオーバーライドする場合は、その後、私は次のような結果を得ることができます。


機能printは常にその出力をフォーマットするtostringを呼び出します。

あなたはこれを誤解しています。ここで、tostringは、テーブルのフィールドではなく、tostringの関数です。つまり、print(t)print(tosstring(t))となります。

テーブルの場合、tostring(t)は、メタメソッドが__tostringであるかどうかを確認し、その結果として使用します。最終的には、まだメタテーブルが必要です。

local t = {} 
local mt = {__tostring = function() return "Hello Lua" end} 
setmetatable(t, mt) 
print(t) 
+2

'setmetatable(t、t)'を呼び出すと '__tostring'は' t'のフィールドになります。 – lhf

関連する問題