[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中更改数值其原数值也会改变。

使用自定义lua解析管理器调用lua脚本中的table的更多相关文章

  1. UI 自定义视图 ,视图管理器

    一>自定义label - textField 视图 自定义视图:系统标准UI之外,自己组合而出的新的视图 iOS 提供了很多UI组件 ,借助它们,我们可以做各种程序 尽管如此,实际开发中,我们还 ...

  2. 使用 NuGet 包管理器在 Visual Studio 中安装和管理包

    https://docs.microsoft.com/zh-cn/nuget/consume-packages/install-use-packages-visual-studio 通过 Window ...

  3. .net 调用 Python脚本中的代码

    使用工具:IronPython 工具介绍:是一种在 .NET 及 Mono上的 Python 实现,是一个开源的项目,基于微软的 DLR 引擎.(个人理解就是在 .net上面运行Python代码) 使 ...

  4. C++调用Python脚本中的函数

    1.环境配置 安装完python后,把python的include和lib拷贝到自己的工程目录下 然后在工程中包括进去 2.例子 先写一个python的测试脚本,如下 这个脚本里面定义了两个函数Hel ...

  5. lua内存管理

    本文内容基于版本:Lua 5.3.0 Lua内存管理器规则 Lua允许用户自定义内存管理器,并在创建Lua虚拟机(lua_State实例)时传入.当然自定义内存管理器必须遵循Lua已定义的一些行为规则 ...

  6. 【Android 应用开发】AndroidUI设计之 布局管理器 - 详细解析布局实现

    写完博客的总结 : 以前没有弄清楚的概念清晰化 父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器 ...

  7. AndroidUI设计之 布局管理器 - 详细解析布局实现

    写完博客的总结 : 以前没有弄清楚的概念清晰化 父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器 ...

  8. 自定义缓存管理器 或者 Spring -- cache

    Spring Cache 缓存是实际工作中非常常用的一种提高性能的方法, 我们会在许多场景下来使用缓存. 本文通过一个简单的例子进行展开,通过对比我们原来的自定义缓存和 spring 的基于注释的 c ...

  9. Django Managers管理器

    Managers class Manager 管理器是向Django模型提供数据库查询操作的接口.Django应用程序中每个模型至少有一个管理器. Manager names 默认情况下管理器的名字为 ...

  10. 『动善时』JMeter基础 — 20、JMeter配置元件【HTTP Cookie管理器】详细介绍

    目录 1.HTTP Cookie管理器介绍 2.HTTP Cookie管理器界面详解 3.JMeter中对Cookie的管理 (1)Cookie的存储 (2)Cookie的管理策略 4.补充:Cook ...

随机推荐

  1. 16 JavaScript逗号运算符

    16 JavaScript逗号运算符 Python 逗号运算符一般用于组合多个表达式,其返回值是最后一个表达式的值,例如: function s(){ console.log(1), console. ...

  2. #dp#洛谷 6855 「EZEC-4.5」走方格

    题目 分析 考虑每个格子\((i,j)\)获得的得分即为经过这个格子与不经过这个格子的答案 预处理出起点到每个点的最小得分和每个点到终点的最小得分, 那么经过这个格子的答案很好求,问题是不经过这个格子 ...

  3. Wasm软件生态系统安全分析

    演讲嘉宾 | 王浩宇 回顾整理 | 廖   涛 排版校对 | 李萍萍 嘉宾简介 王浩宇,华中科技大学教授,博士生导师,华中科技大学OpenHarmony技术俱乐部主任.研究关注于新兴软件系统中的安全. ...

  4. 稀疏镜像在OpenHarmony上的应用

    一.稀疏镜像升级背景 常用系统镜像格式为原始镜像,即RAW格式.镜像体积比较大,在烧录固件或者升级固件时比较耗时,而且在移动设备升级过程时比较耗费流量.为此,将原始镜像用稀疏描述,可以大大地缩减镜像体 ...

  5. Hi3861 通过UART串口协议与其它开发板进行通信

    一.搭建编译环境 1.下载虚拟机VMware和Ubuntu20.0.14 下载 VMware Workstation Pro | CN https://www.vmware.com/cn/produc ...

  6. SpringBoot中bean的生命周期

    目录 概述 使用场景 代码演示bean初始化 TestSupport BeanPostProcessorImpl log 代码 概述 Bean 生命周期管理是 Spring Boot 中的关键功能之一 ...

  7. Git 版本控制系统的完整指南

    什么是 Git? Git 是一个流行的版本控制系统.它是由 Linus Torvalds 于 2005 年创建的,自那时以来由 Junio Hamano 维护. 它用于: 跟踪代码更改 跟踪谁做出了更 ...

  8. 【课程汇总】Hello HarmonyOS系列课程,手把手带你零基础入门

    HarmonyOS是面向未来.面向全场景的新一代智能终端操作系统,为不同设备的智能化.互联与协同提供了统一的语言,给人们带来简洁.流畅.连续.安全可靠的全场景交互体验. 初识HarmonyOS的开发者 ...

  9. sql 语句系列(月份的第一天和最后一天)[八百章之第二十章]

    前言 插播一个,从给定日期值里面提取年月日时分秒. 之所以写这个是因为使用频率太高. mysql: select DATE_FORMAT(CURRENT_TIMESTAMP,'%k') hr, DAT ...

  10. 力扣645(java)-错误的集合(简单)

    题目: 集合 s 包含从 1 到 n 的整数.不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 . 给定一个数组 nu ...