UH2S2L15——Lua调用带out和ref的函数
UH2S2L15——Lua调用带out和ref的函数
调用带out和ref的函数
多个out,ref参数用多返回值接收
-
out参数
注意:out在Lua中不算参数如果有返回值 第一个返回值就是返回值 之后依次返回out
-
ref参数
注意:ref和out不同,在Lua中算参数,我们必须传入一个值
先在C#脚本内声明如下内容
1 | public class Lesson5 |
调用带ref参数的函数
ref
参数,会以多返回值的形式返回给lua,如果函数存在返回值,那么第一个值就是该返回值,之后的返回值,就是ref
的结果,从左到右一一对应
ref
参数,需要传入一个默认值,占位置,即该参数不可以略过或者忽略,必须传入一个值占位
- 假设参数为
(int a, ref int b, ref int c, int d)
,则中间两个值必须传入值占位,哪怕值不会起作用,否则第四个参数无法传入
1 | Lesson5 = CS.Lesson5 |
如果少传入参数,或者忽略ref
参数的传入,则剩余的参数默认会传入0补位,即使ref
相关参数没有作用,
因此我们必须要用值在对应的****ref
参数位置占位
1 | local a, b, c = obj:RefFun(1, 1) --等同于obj:RefFun(1, 1, 0, 0) |
调用带out参数的函数
out
参数,会以多返回值的形式返回给lua,如果函数存在返回值,那么第一个值就是该返回值,之后的返回值,就是out
的结果,从左到右一一对应
out
参数,不需要传占位置的值,需要跳过out
参数,如果传入参数数量多于非out
参数数量,则只取前面的参数,后面的参数忽略
- 假设参数为
(int a, out int b, out int c, int d)
,则中间两个参数不需要传入,如果传入,只会取传入的前面的值,可能造成传入错位!
1 | local a, b, c = obj:OutFun(20, 30) --需要跳过了out参数的传入!否则可能传入参数出现问题 |
1 | --C#: public int OutFun(int a, out int b, out int c, int d) |
调用混合out和ref参数的函数
混合使用时,综合上面的规则,ref
需占位,out
不用传
第一个是函数的返回值,之后,从左到右依次对应ref
或者out
1 | local a, b, c = obj:RefOutFun(20, 1) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!