遇到这么个需求,做新版本但不可以改动以前版本的代码。
这个时候就需要用非侵入式写法。
记录一下从一个大佬那里学到的一种非侵入式写法。
下面这是旧版本代码。
GamePanel = class("GamePanel");
local M = GamePanel;
function M:OpenPanel()
print("openpanel");
end
return M;
下面是更改require函数代码。
local changeTable = {};
changeTable[GamePanel] = "NewGamePanel";
org_require = require;
org_require = function(oldClass, useOld)
if useOld then
return require(oldClass);
end
if changeTable and changeTable[oldClass] then
return require(changeTable[oldClass]);
else
return require(oldClass);
end
end
require = org_require;
接下来新代码这么写,就可以不用改旧代码从而应用新逻辑。
之前require就代码的地方均不作修改。
local M = require("GamePanel", true);
function M:OpenPanel()
print("openpanel");
end
function M:NewOpenPanel()
print("NewOpenPanel");
end
return M;
本文介绍了一种非侵入式的代码更新方法,通过修改require函数实现新旧代码共存,无需直接改动原有代码即可引入新逻辑。适用于游戏开发等场景中版本迭代的需求。

8370

被折叠的 条评论
为什么被折叠?



