结论:
C#函数
lua热更新函数
lua输入参数
lua返回参数
更新前后对比
C#只能接收一个返回值,其余用out或ref参数修饰符接收,
lua函数有多个返回值,out不用输入,ref要有输入
官方的说法是:
根据自己的理解写的一些总结,如有错误,欢迎留言交流
C#只能接收一个返回值,其余用out或ref参数修饰符接收,例如下面函数有3个返回值
第一个返回值:ret,定义一个变量接收return
第二个返回值:num,out修饰参数调用前不需要初始化
第三个返回值:str,ref修饰参数调用前需要初始化
public int TestOut(int a, out double b, ref string c)
{
b = a + 2;
c = "wrong version";
return a + 3;
}
public int TestOut(int a, out double b, ref string c, GameObject go)
{
return TestOut(a, out b, ref c);
}
c#调用
double num;
string str = "hehe";
int ret = calc.TestOut(100, out num, ref str);
C#输入参数(int a, out double b, ref string c, GameObject go)
lua输入参数 a,c,go
out修饰b不用传入参数
a+10 对应c#return int值
a+20 对应c#out double值
‘right version’ 对应c#ref string值
xlua.hotfix(CS.XLuaTest.HotfixCalc, 'TestOut', function(self, a, c, go)
print('TestOut', self, a, c, go)
if go then error('test error') end
return a + 10, a + 20, 'right version'
end)
本案例摘自官方Examples 08Hotfix HotfixTest2
[Hotfix]
public class HotfixCalc
{
public int TestOut(int a, out double b, ref string c)
{
b = a + 2;
c = "wrong version";
return a + 3;
}
public int TestOut(int a, out double b, ref string c, GameObject go)
{
return TestOut(a, out b, ref c);
}
}
public class HotfixTest2 : MonoBehaviour
{
void Start()
{
HotfixCalc calc = new HotfixCalc();
int ret = calc.TestOut(100, out num, ref str);
Debug.Log("ret = " + ret + ", num = " + num + ", str = " + str);
luaenv.DoString(@"
xlua.hotfix(CS.XLuaTest.HotfixCalc, 'TestOut', function(self, a, c, go)
print('TestOut', self, a, c, go)
if go then error('test error') end
return a + 10, a + 20, 'right version'
end)
");
str = "hehe";
ret = calc.TestOut(100, out num, ref str);
Debug.Log("ret = " + ret + ", num = " + num + ", str = " + str);
}
}
打印结果