使用自定义lua解析管理器调用lua脚本中的table

[5] 使用自定义lua解析管理器调用table

访问数组类型的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<object, object> luaDictionary = luaTable.ToDictTable<Object, Object>(); Debug.Log("dictionary[true] = " + luaDictionary[true]);  //通过迭代器遍历 IEnumerator<LuaDictEntry<object, object>> 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中更改数值其原数值也会改变。

发表评论

评论已关闭。

相关文章