您的位置:首页 > 编程语言 > Lua

XLua Lua访问C#中的方法(二)访问多个参数输入,多个返回值的方法

2019-04-14 15:34 1241 查看
访问C#复杂函数
对于参数,Lua会从左到右取C#函数中的普通参数或者ref参数依次作为自己的参数
对于返回值,Lua会从左到右取C#函数中的返回值、ref参数或者out参数依次作为自己的返回值
例如,对于下面的函数ComplexFunction
using UnityEngine;
using XLua;

[LuaCallCSharp]
public class ComplexClass
{
//具有三个返回值的方法(return ref out)
//当Lua调用的这个方法的时候,out关键字不作为输入参数,所以这个方法只需传入四个参数

//1、对于参数,Lua会从左到右取C#函数中的普通参数或者ref参数依次作为自己的参数
//2、 对于返回值,Lua会从左到右取C#函数中的返回值、ref参数或者out参数依次作为自己的返回值
public string ComplexFunction(int arg0, ref int arg1, string arg2, out string arg3, Arg arg4)
{
Debug.Log("=========C#=========");
Debug.Log("arg0:" + arg0);
Debug.Log("arg1:" + arg1);
Debug.Log("arg2:" + arg2);
Debug.Log("Arg:" + arg4);

arg1+=1000;//改变了ref int arg1 传递进来的参数,
arg3 = "3(out string return)";
return "ComplexFunction return.";//在这个方法中,return为作为第一个返回值,ref第二个,out 第三个
}
}

[LuaCallCSharp]
public class Arg
{
public int arg0;
public string arg1;

public override string ToString()
{
return string.Format("arg0:{0} arg1:{1}", arg0, arg1);
}
}

按照上面的原则,首先从左到右检索函数ComplexFunction的普通参数或ref参数
结果为:arg0,arg1,arg2,param
所以在Lua中调用时需要传入以上四个参数
接下来从左到右检索函数的返回值、ref参数或者out参数
结果为:ComplexFunction函数的返回值,arg1,arg3
所以在Lua中将返回上述4个值
print('启动了Lua')

function init()
print("执行了Lua的全局方法init")--无参数的方法
CreatUnityObj()
end

function CreatUnityObj()
local complexClass=CS.ComplexClass()
--根据规则传入了4个参数,out关键字不作为传入的参数,
--返回值接收,先return 在根据传入参数out,ref从左往右的原则
local ret,argRef,argOut=complexClass:ComplexFunction(
100,200,'第三个参数',{arg0=400,arg1='Arg参数'}
)
print('----------Lua Print-------')
print('ret:',ret)
print('argRef:',argRef)
print('argOut:',argOut)

end

``

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐