Lua热更新时正确设置文件名

Lua热更新时正确设置文件名

(金庆的专栏 2016.12)

Lua热更新模块见:
https://github.com/jinq0123/hotfix

其中使用 load(chunk) 来加载更新后的内容,发现 traceback 打印缺少文件名,
这对于调试纠错有不小的影响。


test.lua

local M = {}

function M.test()
  assert(false, "test assert 5")
end

return M


如下测试:

D:\Jinq\temp\lua>d:\Jinq\tools\lua-5.3.2_Win64_bin\lua53
Lua 5.3.2  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> hf = require("hotfix")
> t = require("test")
> t.test()
.\test.lua:4: test assert
stack traceback:
        [C]: in function 'assert'
        .\test.lua:4: in function 'test.test'
        (...tail calls...)
        [C]: in ?
> hf.hotfix_module("test")
table: 000000000078a6d0
> t.test()
[string "local M = {}..."]:4: test assert 2
stack traceback:
        [C]: in function 'assert'
        [string "local M = {}..."]:4: in function 'test.test'
        (...tail calls...)
        [C]: in ?
>

       
文件名信息被文件内容字符串给代替了。

改成:load(chunk, file_path), 结果是这样的:

> t.test()
[string ".\test.lua"]:4: test assert 3
stack traceback:
        [C]: in function 'assert'
        [string ".\test.lua"]:4: in function 'test.test'
        (...tail calls...)
        [C]: in ?
>

查看源码,发现需要用"@"前缀来表示这是个文件名,于是改成:

    load(chunk, '@'..file_path)
    
终于正常了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值