经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Lua » 查看文章
使用自定义lua解析管理器调用lua脚本中的table
来源:cnblogs  作者:畅知  时间:2024/5/11 8:53:27  对本文有异议

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

访问数组类型的table

CallLuaEntrance测试脚本中内容:

  1. //--------------------------------------访问table-----------------------------
  2. //4.1 访问list/数组类型的table
  3. //获取table
  4. LuaTable luaTable = CallLuaManager.Instance().LuaState.GetTable("arrayTable");
  5. //直接访问
  6. Debug.Log("luaTable[1] " + luaTable[1]);
  7. Debug.Log("luaTable[2] " + luaTable[2]);
  8. Debug.Log("luaTable[3] " + luaTable[3]);
  9. Debug.Log("luaTable[4] " + luaTable[4]);
  10. Debug.Log("luaTable[5] " + luaTable[5]);
  11. Debug.Log("luaTable[6] " + luaTable[6]);
  12. Debug.Log("luaTable[7] " + luaTable[7]);
  13. //转成array存储访问
  14. Object[] array = luaTable.ToArray();
  15. for (int i = 0; i < array.Length; i++)
  16. {
  17. Debug.Log("listTable遍历访问 " + array[i]);
  18. }
  19. //检测是否是深拷贝
  20. //更改最后一个数值
  21. luaTable[7] = 9999;
  22. Debug.Log("-------------->luaTable[7] " + luaTable[7]);
  23. //获取arrayTable2
  24. luaTable = CallLuaManager.Instance().LuaState.GetTable("arrayTable2");
  25. Object[] array2 = luaTable.ToArray();
  26. for (int i = 0; i < array2.Length; i++)
  27. {
  28. Debug.Log("listTable遍历访问" + array2[i]);
  29. }

对应的lua内容:

  1. --list/数组类型的table
  2. arrayTable = {2024,05,10,19,55,66,78}
  3. arrayTable2 = {"Hello","Lua",ture,123,88.88}

访问DIctionary类型的table

在C#脚本中使用LuaTable来接受获取到的Table,对于字典类型的Table调用LuaTable的ToDictTable方法转成对应类型的LuaDictTable

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

CallLuaEntrance测试脚本中内容:

  1. //4.2 字典类型的table数值获取
  2. luaTable = CallLuaManager.Instance().LuaState.GetTable("dicTable1");
  3. Debug.Log("luaTable[\"date\"] " + luaTable["date"]);
  4. Debug.Log("luaTable[\"name\"] " + luaTable["name"]);
  5. Debug.Log("luaTable[\"blog\"] " + luaTable["blog"]);
  6. Debug.Log("luaTable[\"WebBlog\"] " + luaTable["WebBlog"]);
  7. luaTable = CallLuaManager.Instance().LuaState.GetTable("dicTable2");
  8. //转成LuaDictTable
  9. // 因为键值对 各自的类型不统一 因此使用object
  10. // 如果类型统一可以使用已知的
  11. LuaDictTable<object, object> luaDictionary = luaTable.ToDictTable<Object, Object>();
  12. Debug.Log("dictionary[true] = " + luaDictionary[true]);
  13. //通过迭代器遍历
  14. IEnumerator<LuaDictEntry<object, object>> enumerable = luaDictionary.GetEnumerator();
  15. while (enumerable.MoveNext())
  16. {
  17. Debug.Log(enumerable.Current.Key + " , " + enumerable.Current.Value);
  18. }

访问的lua脚本中数据:

  1. --Dictionary类型的table
  2. dicTable1 = {
  3. ["date"] = "2024/05/10",
  4. ["name"] = "TonyChang",
  5. ["blog"] = "TonyCode",
  6. ["WebBlog"] = "cnblogs",
  7. }
  8. dicTable2 = {
  9. [12] = 666,
  10. [true] = 1,
  11. [20.01] = "Yes!",
  12. ["tony"] = "geeks",
  13. }

最后总结一下:

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

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

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

原文链接:https://www.cnblogs.com/TonyCode/p/18185278

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号