3

次のようなコードがあるとします

aTable = {aValue=1}
aTable_mt = {}
print(aTable)  

aTable current aValue = 1Lua が ではなくのように出力するにはどうすればよいですtable: 0x01ab1d2

これまでのところ、メタメソッドを設定しようとしました__tostringが、それは によって呼び出されないようですprint。私が見逃しているメタメソッドはありますか、それとも答えはメタメソッドとは何の関係もありませんか?

4

3 に答える 3

2

lua で人間が読めるすべてのテーブルを一般的に印刷する場合は、印刷機能をフックアップ/上書きできます。

local orig_print = print

print = function(...)
  local args = {...}
  for i,arg in ipairs(args) do
    if type(arg) == 'table' then
      args[i] = serialize(arg)
    end
  end
  orig_print(table.unpack(args))
end

serialize蛇またはここからの他のライブラリである可能性があります

これは、他のモジュール/スクリプトがロードされる前に実行する必要があることに注意してください。

于 2015-04-15T06:44:31.827 に答える
2

__tostring作品:

aTable = {aValue=1}
local mt = {__tostring = function(t) 
                           local result = ''
                           for k, v in pairs(t) do
                             result = result .. tostring(k) .. ' ' .. tostring(v) .. ''
                           end
                           return result
                         end}      

setmetatable(aTable, mt)    

print(aTable) 

これは印刷されますaValue 1(余分な空白が1つあり、実際のコードでは削除されます)。テーブル自体のコンテンツではなく、テーブルを参照する変数であるため、aTableパーツは使用できません。aTable

于 2015-04-15T00:57:19.813 に答える