xLua的table映射到interface
-
1.Lua脚本的书写,table中包含了函数的声明
person={
name="fex",age="22",12,12,13,
eat=function(self,a,b) --声明方法1:self为该表自身的参数,类似C#中this
print(a+b)
print("我吃了")
end
}
--[[
--声明方法2:
function person:eat(a,b)
print(a+b)
end
--声明方法3:
function person.eat(self,a,b)
print(a+b)
end
--]]
-
2.C#中通过interface访问table
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
public class _004_CsharpCallLua : MonoBehaviour
{
private LuaEnv env;
void Start()
{
env = new LuaEnv();
env.DoString("require 'CSharpCallLua'");
IPerson p = env.Global.Get<IPerson>("person");
print(p.name);
print(p.age);
p.name = "hello fex";
env.DoString("print(person.name)");//interface是引用类型,可以修改lua中的值。
p.eat(10, 10);
}
private void OnDestroy()
{
env.Dispose();
}
[CSharpCallLua] //必须打上此标签
interface IPerson
{
string name { get; set; }
int age { get; set; }
void eat(int a, int b);
}
}
输出结果:
注意:
1.在C#中声明interface来映射table时,要记住在接口上方打上标签[CSharpCallLua]。
2.在table中直接声明方法时,方法的第一个参数默认是自身,可以声明为self,当然也可以是其他名称。
同时上面Lua脚本中还举例书写了另外两种书写table中函数的方法。
3.C#通过interface访问Lua中table时是传递的引用类型,与通过class方法中的值拷贝不同,这里可以在C#修改值,同时Lua中的值也会发生改变。
4.如果要输出中文字符,要确保Lua脚本时utf-8的编码格式,避免乱码显示中文。