[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. lodash已死?radash最全使用介绍(附源码说明)—— Array方法篇(2)

    前言 前篇我们已经介绍了 radash 的相关信息和部分 Array 相关方法,详情可前往主页查看: 本篇我们继续介绍 radash 中 Array 的其他相关方法: Radash 的 Array 相 ...

  2. #计数#CF10C Digital Root

    题目 定义\(d(x)\)为\(x\)的数位和嵌套,直至\(0\leq d(x)<10\) 询问在\([1\sim n]\)中有多少个三元组\((a,b,c)\)满足 \[ab\neq c,d( ...

  3. 链表LinkedList

    #include <iostream> #include <vector> using namespace std; struct Node{ int val; Node *n ...

  4. 在 Visual Studio 2022 中创建一个类似于旧版本 Visual Studio 中的 Win32 Console Application 项目

    在 Visual Studio 2022 中创建一个项目,其自动生成的源文件内容包含 #include "stdafx.h" 和使用_tmain 作为入口点,意味着你需要创建一个基 ...

  5. linux下升级openssh参考[不建议采用此法安装]

    本人不见一采用这种方法安装,只是当遇到问题时候有一定的参考意义,所以贴了上来.建议使用yum方式安装,详见在下另一篇博文: http://blog.csdn.net/lqzixi/article/de ...

  6. 重新点亮linux 命令树————查看进程[二十一]

    前言 简单介绍一下进程. 正文 进程管理: 进程的概念与进程查看 进程的控制命令 进程的通信方式---信号 守护进程和系统日志 服务管理工具 systemctl SELinux 简介 进程概念: ht ...

  7. c# unsafe

    前言 c# unsafe可以让我们做一些测试的危险操作. 正文 打开unsafe 功能 在 Visual Studio 开发环境中设置此编译器选项 打开项目的"属性"页. 单击&q ...

  8. golang开发 深入理解 context

    context的历史 context包在Go 1.7版本正式加入Go标准库.在加入之前我们看看Go团队核心成员Sameer Ajmani在2014年发表的一篇关于context介绍博客,地址:http ...

  9. Flink Standalone集群部署

    Flink Standalone模式部署集群是最简单的一种部署方式,不依赖于其他的组件,另外还支持YARN/Mesos/Docker等模式下的部署,这里使用的flink版本为最新的稳定版1.9.1版本 ...

  10. steam社区留言红小作文模板

    steam社区留言红小作文模板 Dear steam: Im a steam user which most play csgo.i saw i had be banned in steam comm ...