Lua中的原表介绍及其使用举例

__tostring        

__tostring(a) --字符串输出 ,当调用tostring(obj)的时候,会先查找obj的元方法中的__tostring,如果有就调用,没有就会打印obj的内存地址。

使用方法如下:

LuaModuleNames={}
LuaModuleNames=setmetatable({},{
	__tostring=function(LuaModuleNames)
		local str=""
		for k,v in pairs(LuaModuleNames)  do
			str=str .. k ..","
		end
		return str
	end
})
function RegModule(modulename,path)
	assert(not LuaModuleNames[modulename],"moduleName--> "..modulename .."is already Add")
	LuaModuleNames[modulename]=true
end

RegModule("name")


RegModule("we")
print(LuaModuleNames)
print(tostring(LuaModuleNames))

递归打印table

function DumpTable(t,tablename,depth)
  local output=""
  output=string.format("DumpaTable [%s]:\n",tablename)
   local function doDumpTable(t,pre,depth)
      if depth==0 then return end
      for k,v in pairs(t) do
        output=output .. string.format("%s[%s](%s)=%s(%s)\n",
          pre,
          tostring(k),
          type(k),
          tostring(v),
          type(v))
        if type(v)==type({}) then
          doDumpTable(v,pre.."\t",depth-1)
        end
      end
  end
  doDumpTable(t,"  ",depth or 3)
  output=output.."end"
  print(output)
  return output
end

local test={
    ["tbl"]={
        ["tbl2"]={
          ["333"]={}
          },
        ["test"]=function() end
      },
    ["ttt"]=function() end
  }
  
DumpTable(test,"test")

扩展:

结合原表的__tostring方法,实现C#中object的tostring()方法,例如:local test={},print(test.tostring(...))打印其中的数据结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值