遇到这么个需求,做新版本但不可以改动以前版本的代码。
这个时候就需要用非侵入式写法。
记录一下从一个大佬那里学到的一种非侵入式写法。
下面这是旧版本代码。
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;