如何打印出lua里table的内容

打印函数,辅助调试

在 Lua 中,最常用的打印语句是 print 函数。这个函数可以接受多个参数,并将它们转换为字符串,然后输出到标准输出(通常是控制台或终端)。print 函数在调试和日志记录中非常有用,因为它可以帮助开发者了解程序的运行状态。

基本的 print 用法

print("Hello, world!")  -- 打印字符串
print(123)              -- 打印数字

打印多个变量

print 函数可以接受多个参数,并按顺序打印它们,参数之间用制表符(tab)分隔。

local a = 10
local b = 20
print(a, b)  -- 打印两个变量

复杂表数据的打印

对于表(table)这样的复杂数据结构,print 仅打印表的内存地址。如果你想打印表的内容,需要编写一个遍历表的函数。

local t = { key1 = "value1", key2 = "value2" }
print(t)  -- 这将不会打印表的内容,而是表的地址

-- 遍历并打印表的内容
for k, v in pairs(t) do
    print(k, v)
end

-- 遍历并打印表的数组内容
for k, v in ipairs(t) do
    print(k, v)
end

自定义的打印table数据函数

-- @function: 打印table的内容,递归
-- @param: tbl 要打印的table
-- @param: level 递归的层数,默认不用传值进来
-- @param: filteDefault 是否过滤打印构造函数,默认为是
-- @return: return
function PrintTable( tbl , level, filteDefault)
  local msg = ""
  filteDefault = filteDefault or true --默认过滤关键字(DeleteMe, _class_type)
  level = level or 1
  local indent_str = ""
  for i = 1, level do
    indent_str = indent_str.."  "
  end

  print(indent_str .. "{")
  for k,v in pairs(tbl) do
    if filteDefault then
      if k ~= "_class_type" and k ~= "DeleteMe" then
        local item_str = string.format("%s%s = %s", indent_str .. " ",tostring(k), tostring(v))
        print(item_str)
        if type(v) == "table" then
          PrintTable(v, level + 1)
        end
      end
    else
      local item_str = string.format("%s%s = %s", indent_str .. " ",tostring(k), tostring(v))
      print(item_str)
      if type(v) == "table" then
        PrintTable(v, level + 1)
      end
    end
  end
  print(indent_str .. "}")
end

for k, v in pairs(package) do
  print("package[" .. k .. "] type is " .. type(v));
end

print("---------------------------------------------")
for k, v in pairs(package.loaded) do
  print("package.loaded[" .. k .. "] type is " .. type(v));
end

print("---------------------------------------------")

PrintTable(package.loaded['table'])

 打印信息

封装一个函数,打印table数据的内容,这里打印package.loaded已加载所有模块及table的内容

package[preload] type is table
package[loadlib] type is function
package[loaded] type is table
package[loaders] type is table
package[cpath] type is string
package[config] type is string
package[path] type is string
package[seeall] type is function

--------------------------------------------- 

package.loaded[string] type is table
package.loaded[debug] type is table
package.loaded[package] type is table
package.loaded[_G] type is table
package.loaded[io] type is table
package.loaded[os] type is table
package.loaded[table] type is table
package.loaded[math] type is table
package.loaded[coroutine] type is table

---------------------------------------------
{
   setn = function: 00C387F0
   insert = function: 00C38B50
   getn = function: 00C38A90
   foreachi = function: 00C38A70
   maxn = function: 00C38AD0
   foreach = function: 00C38990
   concat = function: 00C38CB0
   sort = function: 00C38930
   remove = function: 00C38570
}

格式化输出

Lua 还提供了 string.format 函数,用于格式化字符串。这对于需要特定格式输出的情况非常有用。

local name = "Lua"
local version = 5.4
print(string.format("Welcome to %s version %.1f!", name, version))

在这个例子中,%s 用于格式化字符串,%.1f 用于格式化浮点数,保留一位小数。

自定义打印函数

有时,你可能需要根据特定的需求来自定义打印函数,例如,将输出重定向到文件或图形界面。

function customPrint(...)
    local args = {...}
    for i, v in ipairs(args) do
        -- 处理每个参数
    end
    -- 实现自定义的打印逻辑
end

在这个自定义函中,你可以根据需要处理每个参数,并实现自己的打印逻辑。


在 Lua 中,除了最常用的 print 函数之外,没有内置的其他打印函数。但是,你可以使用其他方法来实现类似打印的功能,或者创建自定义的打印函数。以下是一些常见的替代方法:

  1. io.write 函数io.write 函数用于向标准输出写入数据,但它不会像 print 那样在每次调用后自动添加换行符。

    io.write("Hello, ") io.write("world!\n")
  2. string.format 结合 print 或 io.write这里string.format 用于格式化字符串,但它本身不打印。通常与 print 或 io.write 结合使用以输出格式化后的字符串。print(string.format("Name: %s, Age: %d", "Alice", 30))
  3. 写入文件: 如果你想将输出重定向到文件,可以使用 Lua 的文件操作函数。

    local file = io.open("output.txt", "w") file:write("Hello, file!\n") file:close()
  4. 自定义打印函数: 你可以根据需要创建自定义的打印函数,例如,用于格式化和打印复杂的数据结构。

    functioncustomPrint(...)-- 自定义打印逻辑end
  5. 使用 tostring 函数tostring 函数可以将非字符串类型的值转换为字符串,这在打印非字符串类型的数据时很有用。

    local num = 123,print(tostring(num))
  6. 调试库(debug)的使用: Lua 的 debug 库提供了一些用于调试的函数,这些函数可以用来打印调试信息,但它们通常用于更复杂的调试场景。

请注意,除了 print 和 io.write,其他方法都不是直接用于打印的,但可以用于生成可打印的字符串或实现自定义的打印逻辑。在实际应用中,选择哪种方法取决于你的具体需求和场景。

参考:

https://zhuanlan.zhihu.com/p/671145968

如何打印出lua里table的内容 - 立航 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值