function reload_module(module_name)
local old_module = require (module_name) --获取老模块
package.loaded[module_name] = nil --赋值为空
require (module_name) --加载新模块
local new_module = require (module_name) --获取新模块
for k, v in pairs(new_module) do --循环新模块中的所有属性方法等内容
old_module[k] = nil --把心模块的改变都塞给老模块
old_module[k] = v --把心模块的改变都塞给老模块
end
package.loaded[module_name] = old_module --最后我们再把老模块塞回来。那么引用老模块的其他模块引用的东西也就改变了
end
[hotfix]
public class Calc
{
int Add(int a, int b)
{
return a + b
}
}
打了hotfix标签后,xLua会在il(中间语言)层面注入代码,注入之后这个类会类似这样:
public class Calc
{
static Func<object, int, int, int> hotfix_Add = null;
int Add(int a, int b)
{
if (hotfix_Add != null) return hotfix_Add(this, a, b);
return a + b
}
}
如果lua中执行了hotfix调用,hotfix_Add会指向一个lua的适配函数。