Как мы изменим способ отображения таблицы
Предполагая, что у меня есть кусок кода, такой как следующий
aTable = {aValue=1}
aTable_mt = {}
print(aTable)
Что я должен сделать, чтобы Lua напечатал что-то вроде aTable current aValue = 1
в отличие от table: 0x01ab1d2
,
До сих пор я пытался установить __tostring
метаметод, но это, кажется, не вызывается print
, Есть ли какой-то метаметод, который я пропустил, или ответ не имеет ничего общего с метаметодами?
3 ответа
__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
(с одним лишним пробелом удалите его в реальном коде). aTable
часть не доступна, потому что aTable
переменная, которая ссылается на таблицу, а не на содержимое самой таблицы.
Если вы хотите, чтобы 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
отсюда может быть змея или какая-то другая библиотека
Обратите внимание, что это необходимо сделать до загрузки любого другого модуля / скрипта.
Я не уверен, как вы устанавливаете метаметод, но следующий код выводит "stringified" для меня:
local aTable = {a = 1, b = 2}
setmetatable(aTable, {__tostring = function() return "stringified" end})
print(aTable)