-
Notifications
You must be signed in to change notification settings - Fork 204
HotFix
bruce edited this page Jun 13, 2022
·
5 revisions
lua作为脚本语言,一个优势就是可以做热更新,在不重启进程的情况下,用新版本的函数替换旧版本函数。但由于lua的灵活性,实现100%的热更又不太可能。 在一定的限制条件下并兼顾性能,moon提供了一种热更方案:
- 按模块来更新(一个lua脚本文件),只处理内部的table和函数
- 非函数类型upvalue保留
- Table的函数value和函数类型upvalue替换为新版本
- 模块内不能新增函数
local moon = require("moon")
---Upvalues(not function type) will Reserved
local a = 100
local b = 200
local M = {}
M.__index = M
function M.new()
local obj = {
n = 0,
m = "hello"
}
return setmetatable(obj,M)
end
---Function type upvalue will replaced by new version
local function tmp(self)
self.n=self.n+1000
end
---Function fields will replaced by new version
function M:func()
tmp(self)
print("before", self.n, self.m, a-b)
moon.sleep(1000)
end
return M