Lua 开发中常用的实用代码片段集合。
print 打印代码位置
重写全局 print 函数,使其在输出时自动附加当前协程 ID 和源文件行号,方便在多协程环境中快速定位日志来源。
local function rpad(str, len, char)
if char == nil then char = ' ' end
return str .. string.rep(char, len - #str)
end
local originalPrint = print
_G.print = function(...)
local co, _ = coroutine.running()
local info = debug.getinfo(2, "Sl")
local lineinfo = rpad(info.short_src .. ":" .. info.currentline, 22)
local prefix = string.format("[%s][%s] ", tostring(co):match("thread: (.+)"), lineinfo)
-- 使用table.concat来连接所有参数,并去除开头的空格
local args = { ... }
for i = 1, #args do
args[i] = tostring(args[i])
end
local message = table.concat(args, " ")
message = message:gsub("^%s+", "") -- 去除开头的空格
originalPrint(prefix .. " " .. message)
end