c#代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; using XLua; #region ref和out public class RefOut { 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; } } #endregion public class LuaCallCS : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } }lua代码:
RefOut=CS.RefOut local rf=RefOut() --[[ ref参数 会以多返回值的形式返回给lua 如果函数存在返回值 那么第一个值就是该返回值 之后的返回值,就是ref的结果 从左到右一一对应 ref参数 需要传入一个默认值 占位置,int类型可以都传0 a相当于是函数的返回值 b第一个ref c第二个ref ]] local a,b,c=rf:RefFun(1,0,0,4) print(a) print(b) print(c) --[[ out参数 会以多返回值的形式返回给lua 如果函数存在返回值 那么第一个值就是该函数的返回值 之后的返回值 就是out的结果 从左到右一一对应 out参数 不需要传占位置的值,和ref不一样,ref要传占位置的值 ]] local d,e,f=rf:OutFun(10,30) print(d) print(e) print(f) --如果是ref,out混用的函数,就遵循各自的规则 --ref占位,out不用传 --第一个函数是返回值,从左到右依次对应ref或者out local g,h,i=rf:RefOutFun(10,0) print(g) print(h) print(i)