xlua - c#中LuaFunction转委托

为什么要将LuaFunction转为委托?

1、调用起来更方便

2、不需要关心忘记Dispose,造成c#端长时间持有lua层的引用而导致lua层对象无法释放问题

 

public T LuaFunToDelegate<T>(LuaEnv luaEnv, string luaStr) where T : Delegate
{
    var results = luaEnv.DoString(luaStr);
    using (var luaFun = (LuaFunction)results[0])
    {
        var d = luaFun.Cast<T>();
        return d;
    }
}

 

桥接代码生成配置加上Func<int, int, int>委托

[LuaCallCSharp]
public static List<Type> LuaCallCSharpGenCfg = new List<Type>() 
{
    typeof(System.Func<int, int, int>),
};

 

调用代码

public void Test(LuaEnv luaEnv)
{
    string luaStr = $@"
        local addFun = function(a, b)
            return a + b
        end
        return addFun
    ";
    var addFun = LuaFunToDelegate<Func<int, int, int>>(luaEnv, luaStr);
    int result = addFun(2, 3);
    Debug.Log($"add result: {result}");
}

 

posted @ 2026-04-15 00:19  yanghui01  阅读(2)  评论(0)    收藏  举报