是否有可能绕过__tostring,方式是原始/设置绕过Lua中的__index / __ newindex?

时间:2017-04-07 19:22:23

标签: lua metatable meta-method

例如:

local my_table = { name = "my table" }
local my_table_mt = {}

function my_table_mt.__tostring(tbl)
    return "%s<%s>":format(tbl.name or "?", rawtostring(tbl))
end

这样的事情可能吗?我知道rawtostring方法不存在,但是有可能模拟这种行为,或者完全绕过它吗?

1 个答案:

答案 0 :(得分:3)

只有这个kludge:

function rawtostring(t)
   local m=getmetatable(t)
   local f=m.__tostring
   m.__tostring=nil
   local s=tostring(t)
   m.__tostring=f
   return s
end