Lua中是否有办法像rawget/set 会绕过__index/__newindex一样绕过__tostring?

举个例子:

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方法不存在,但是是否有可能模拟这种行为,或者完全绕过它呢?

点赞
用户107090
用户107090

只有这个"权宜之计":

function rawtostring(t)
   local m=getmetatable(t)
   local f=m.__tostring
   m.__tostring=nil
   local s=tostring(t)
   m.__tostring=f
   return s
end
2017-04-07 20:35:25