XLua Hotfix 常见问题分析 范型 重载等

最近做了下代码的热修复功能,主要为了修复线上出现的UI模块的bug.下面总结下遇到的问题。

为什么要使用热修复以及为什么选择XLua?

使用热修复是为了紧急修复一些线上bug,同时避免整包更新.选择XLua是因为它的hotfix能方便的接入到纯C#开发的代码中,效率还行.

开发过程中需要注意什么?

我把UI相关的命名空间都加到了配置中,打包过程中会对这些命名空间下的类型进行代码注入。开发过程中的只需要保证命名空间的正确性。

问题分析

  1. 可以先查看xLua-master\Assets\XLua\Doc的文档(git下载的工程中有)
  2. 热修复重载函数

public class ClsType
{
public void Test(int a, int b) { Log(a + b);}
public void Test(string a, string b) { Log(a + b);}
public void Test(A a, A b) { Log(“A”);}
public void Test(B a, B b) { Log(“B”)}
}
xlua.hotfix(ClsType, “Method”, function(self, a,b)
if type(a) == “userdata” then
if a:GetType() == CS.A.UnderlyingSystemType then
print(“A hotfix”)
elseif a:GetType() == CS.B.UnderlyingSystemType then
print(“B hotfix”)
end
elseif type(a) == “number” then
print(a + b)
elseif type(a) == “string” then
print(a…b)
end
end)
XLua对于重载函数的修复是所有函数都会走到xlua修复的函数中,所有我的解决办法是对参数类型进行判断,当然对于float和double的重载就分不清了,因为这两个数据类型都对应lua的number。

  1. 热修复子类函数,子类调用父类
    base(self):Func()

  2. 构造函数打补丁
    构造函数的热修复不是替换,是执行原有函数后指行修复函数。
    xlua.hotfix(CS.COW.UI.TestB, “.ctor”, function(self, a,b)
    print(“lua .ctor”)
    end)

  3. 泛型函数打补丁
    泛型函数只能针对指定类型进行修复
    public class Test
    {
    public void Add(T n1, T n2){Debug.Log(“Add”); }
    }
    xlua.hotfix(CS.Test(CS.System.Int32), “Add”, function(self, a,b)
    print(a + b)
    end)

  4. Lua中调用CS的范型函数
    xlua.get_generic_method(className,methodName,index)
    获取某个类型的某个范型函数,如果是重载的范型函数,可以使用index。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值