UH2S3L14——Lua调用函数(ref和out)

Lua调用C#的ref和out方法

假设我们要调用下面的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Lesson5
{
public int RefFun(int a, ref int b, ref int c, int d)
{
b = a + d;
c = a - d;
return 100;
}

public int OutFun(int a, out int b, out int c, int d)
{
b = a;
c = d;
return 200;
}

public int RefOutFun(int a, out int b, ref int c)
{
b = a * 10;
c = a * 20;
return 300;
}
}

调用带ref参数方法

实际上,toLua对ref​支持的不太好,官方也没有针对ref​的示例,不建议使用
不过我们还是可以使用带ref参数的方法的 (有重载的情况下除外,详见下一章

toLua和xLua中对ref​和out​函数的使用基本类似,是通过多返回值的形式来处理的
如果是out​和ref​函数,则第一个返回值是函数的默认返回值,之后的返回值就是ref和out对应的结果,从左到右一一对应

a​是函数的返回值,b​是第一个ref​,c​是第二个ref

1
2
3
4
5
6
local obj = Lesson5()
print(obj:RefFun(10, 0, 0, 1))
local a, b, c = obj:RefFun(10, 0, 0, 1)
print(a)
print(b)
print(c)

image

调用带out参数方法

和xLua的区别是:xlua中ref​需占位,out​参数不需要
而toLua:ref​和out​都需要占位

a​是函数的返回值,b​是第一个out​,c​是第二个out

1
2
3
4
5
print(obj:OutFun(20, nil, nil, 30))
local a, b, c = obj:OutFun(20, 0, 0, 30)
print(a)
print(b)
print(c)

image

调用带ref和out参数方法

混合使用时,综合上面的规则,ref​和out​都需占位
第一个是函数的返回值,之后,从左到右依次对应ref​或者out

1
2
3
4
5
print(obj:RefOutFun(20, nil, 1))
local a, b, c = obj:RefOutFun(20, nil, 1)
print(a)
print(b)
print(c)

image