[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. 【WCH以太网接口系列芯片】STM32+CH390+Lwip协议栈简单应用测试

    本篇文章基于STM32F103和CH390H芯片进行例程移植及相关注意事项,简单验证TCP\UDP\Ping基础功能. 硬件:STM32F103开发板+沁恒CH390H的评估版图一示,SPI使用接口为 ...

  2. #Tarjan,树的直径#CF1000E We Need More Bosses

    题目 给定一个\(n\)个点\(m\)条边的无向图,找到两个点\(s,t\),使得\(s\)到\(t\)必须经过的边最多 分析 桥就是必须经过的边,考虑给无向图缩点, 按照桥建一棵树,那么就转换成了求 ...

  3. go~在阿里mse上使用redis.call

    相关依赖 github.com/higress-group/proxy-wasm-go-sdk github.com/alibaba/higress/plugins/wasm-go 标准的redis ...

  4. 深入解析 Java 面向对象编程与类属性应用

    Java 面向对象编程 面向对象编程 (OOP) 是一种编程范式,它将程序组织成对象.对象包含数据和操作数据的方法. OOP 的优势: 更快.更易于执行 提供清晰的结构 代码更易于维护.修改和调试 提 ...

  5. 选择适合您网站的 SQL 托管:MS SQL Server、Oracle、MySQL

    SQL托管 如果您希望您的网站能够存储和检索数据,您的Web服务器应该能够访问使用SQL语言的数据库系统.以下是一些常见的SQL托管选项: MS SQL Server Microsoft的SQL Se ...

  6. SQL JOIN 子句:合并多个表中相关行的完整指南

    SQL JOIN JOIN子句用于基于它们之间的相关列合并来自两个或更多表的行. 让我们看一下"Orders"表的一部分选择: OrderID CustomerID OrderDa ...

  7. AI数字人克隆人直播源码独立部署的应用!

    AI虚拟数字人正在从概念性试验品逐步落地到实际应用场景,特别是在电商直播领域,AI数字人虚拟主播应用可以说是大放异彩,目前,以真人形象为基础的数字人主播,不受场地.真人.布景.灯光.直播设备的限制,相 ...

  8. Memory Error

    不久前,为了满足工作中日常的各种实验测试需求,终于按需求组装一台塔式的server T440.但是没有多久就出现些问题,以下大概是问题和现象简单描述: (1). 最开始时,没几天就出现自动重启的问题, ...

  9. 揭秘sealer背后实现整个集群一键交付的奥秘 | 龙蜥技术

    ​简介:解读集群镜像"开箱即用"神器--sealer! 编者按:集群镜像把整个集群看成一台服务器,把 k8s 看成云操作系统,实现整个集群的镜像化打包和交付,为企业级软件提供一种& ...

  10. 重磅官宣:Nacos2.0发布,性能提升10倍

    简介: ​Nacos2.0 作为一个跨代版本,彻底解决了 Nacos1.X 的性能问题,将性能提升了 10 倍. 作者:席翁 继 Nacos 1.0 发布以来,Nacos 迅速被成千上万家企业采用,并 ...