Luaでメタテーブルを使用せずにテーブルを印刷することはできますか? Luaのでロベルトの本プログラミングでLuaでメタテーブルのないテーブルを印刷
、彼は「機能print
は常にその出力をフォーマットするtostring
を呼び出す」に言及しています。これは、メタテーブルなしで行うことはできません
> a = {}
> a.tostring = function() return "Lua is cool" end
> print(a)
table: 0x24038c0
Luaでメタテーブルを使用せずにテーブルを印刷することはできますか? Luaのでロベルトの本プログラミングでLuaでメタテーブルのないテーブルを印刷
、彼は「機能print
は常にその出力をフォーマットするtostring
を呼び出す」に言及しています。これは、メタテーブルなしで行うことはできません
> a = {}
> a.tostring = function() return "Lua is cool" end
> print(a)
table: 0x24038c0
:私は私のテーブルにtostring
をオーバーライドする場合は、その後、私は次のような結果を得ることができます。
機能
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)
'setmetatable(t、t)'を呼び出すと '__tostring'は' t'のフィールドになります。 – lhf
「テーブルを印刷する」とはどういう意味ですか?テーブル内の各キーと値を印刷することを意味しますか?キーと値をサブテーブルにも印刷しますか? Luaにテーブルを印刷する "標準的な"方法はないので、答えはあなたが何をしたいのかによって異なります。 –
シリアライザを取得し、その出力を表示します。 – FareakyGnome