使用自定义lua解析管理器调用lua脚本中的table-kb88凯时官网登录

时间:2024-05-10
阅读:

访问数组类型的table

callluaentrance测试脚本中内容:

 //--------------------------------------访问table-----------------------------
//4.1 访问list/数组类型的table
//获取table
luatable luatable = callluamanager.instance().luastate.gettable("arraytable");
//直接访问
debug.log("luatable[1] "   luatable[1]);
debug.log("luatable[2] "   luatable[2]);
debug.log("luatable[3] "   luatable[3]);
debug.log("luatable[4] "   luatable[4]);
debug.log("luatable[5] "   luatable[5]);
debug.log("luatable[6] "   luatable[6]);
debug.log("luatable[7] "   luatable[7]);
//转成array存储访问
object[] array = luatable.toarray();
for (int i = 0; i < array.length; i  )
{
    debug.log("listtable遍历访问 "   array[i]);
}
//检测是否是深拷贝
//更改最后一个数值
luatable[7] = 9999;
debug.log("-------------->luatable[7] "   luatable[7]);
//获取arraytable2 
luatable = callluamanager.instance().luastate.gettable("arraytable2");
object[] array2 = luatable.toarray();
for (int i = 0; i < array2.length; i  )
{
    debug.log("listtable遍历访问"   array2[i]);
}

对应的lua内容:

--list/数组类型的table
arraytable = {2024,05,10,19,55,66,78}
arraytable2 = {"hello","lua",ture,123,88.88}

访问dictionary类型的table

在c#脚本中使用luatable来接受获取到的table,对于字典类型的table调用luatable的todicttable方法转成对应类型的luadicttable

类型,获取字典的迭代器对字典进行迭代遍历。

callluaentrance测试脚本中内容:

 //4.2 字典类型的table数值获取
 luatable = callluamanager.instance().luastate.gettable("dictable1");
 debug.log("luatable[\"date\"] "   luatable["date"]);
 debug.log("luatable[\"name\"] "   luatable["name"]);
 debug.log("luatable[\"blog\"] "   luatable["blog"]);
 debug.log("luatable[\"webblog\"] "   luatable["webblog"]);
luatable = callluamanager.instance().luastate.gettable("dictable2");
//转成luadicttable
// 因为键值对 各自的类型不统一 因此使用object 
// 如果类型统一可以使用已知的
luadicttable luadictionary = luatable.todicttable();
debug.log("dictionary[true] = "   luadictionary[true]);
//通过迭代器遍历
ienumerator> enumerable = luadictionary.getenumerator();
while (enumerable.movenext())
{
debug.log(enumerable.current.key   "  ,  "   enumerable.current.value);
}

访问的lua脚本中数据:

--dictionary类型的table
dictable1 = {
	["date"] = "2024/05/10",
	["name"] = "tonychang",
	["blog"] = "tonycode",
	["webblog"] = "cnblogs",
}
dictable2 = {
	[12] = 666,
	[true] = 1,
    [20.01] = "yes!",
	["tony"] = "geeks",
}

最后总结一下:

在c#中调用lua中的table和函数,就是先使用luastate中方法获取到对应的函数或者table,之后根据获取的类型进行对应的解析访问。

一般我们调用一个具体的函数或者table时候,已经清楚其对应的类型,可以根据对应类型将table具体转换,之后访问使用。

此外发现,luatable中的是浅拷贝(索引指向同一个数值),即在获取到的luatable中更改数值其原数值也会改变。

返回顶部
顶部
网站地图