Lua元表应用举例:配置表格转为Lua配置表
- 把配置表格.xlsx数据转为Lua配置表,其实就是把表格数据用Lua写一遍,这里的实现重点就是setmetatable设置元表。
- 以下以表格student_info.xlsx举例,展示对应Lua配置表内容:
- 表格内容:
student_info.xlsx内容
- 对应Lua配置表起名为student_info.lua,内容如下。姓名name考虑到以后有重复的可能,所以单独建了一个表__CS存储。
--[[ 列名称 备注
id 编号
name 姓名
age 年龄
]] -- 列名称
local __key_map =
{
id = 1,
name = 2,
age = 3,
} -- string 常量
local __CS =
{
"张三",
"李四",
"王五",
} -- meta table
local mt =
{
__index = function(t, k)
if __key_map[k] == nil then
return nil
end
return t[__key_map[k]]
end
} local cfg = {}
cfg[1000]= setmetatable({ 1000, __CS[1], 15,}, mt)
cfg[1001]= setmetatable({ 1001, __CS[2], 16,}, mt)
cfg[1002]= setmetatable({ 1002, __CS[3], 15,}, mt)
return cfg
测试打印王五的信息(这里省略了require部分):
print(cfg[1002].id, cfg[1002].name, cfg[1002].age)
运行结果如下:
Lua元表应用举例:配置表格转为Lua配置表的更多相关文章
- [转]LUA元表
lua元表和元方法 <lua程序设计> 13章 读书笔记 lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表.lua在 ...
- 学习Lua setmetatable Lua 元表
Lua 元表(Metatable) 在 Lua table 中我们可以访问对应的key来得到value值,但是却无法对两个 table 进行操作. 个人理解,这个相当于其他语言的继承,是把这个类的方法 ...
- lua元表学习
a = {, } b= {, } vector2 = {} function vector2.Add(v1, v2) if(v1 == nil or v2 == nil)then return nil ...
- Lua 学习之基础篇八<Lua 元表(Metatabble)&&继承>
讲到元表,先看一段table的合并动作. t1 = {1,2} t2 = {3,4} t3 = t1 + t2 attempt to perform arithmetic on a table val ...
- Step By Step(Lua元表与元方法)
Step By Step(Lua元表与元方法) Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表 ...
- 一文读懂Lua元表
元表 Lua语言中的每种类型的值都有一套可预见的操作集合.例如,我们可以将数字相加,可以连接字符串,还可以在表中插入键值对等,但是我们无法将两个表相加,无法对函数作比较,也无法调用一个字符串,除非使用 ...
- ubuntu配置lua环境,并进行c与lua的相互调用
1.安装lua环境 先查看一下apt可获取的lua版本 我们选择lua5.1版本进行安装 sudo apt install lua5.1 安装完之后测试一下是否安装成功,如果可以正常使用,则lua环境 ...
- KEngine策划指南:配置表格的编辑与编译
策划与程序的桥梁 执行策划在游戏开发的过程中的主要工作是什么?当然就是和Excel打交道了.大量的Excel数据表,最终会被演变成游戏的配置数据.日常游戏开发中,策划编辑配置表一般有两种方式: 编译式 ...
- lua 学习 (一 )Mac搭建lua环境和ide
今天开始学习lua 首先是搭建环境 和 我的hello world 首先 交代一下我用的是 Mac 系统 所以在Mac上安装lua 环境很方便的 lua Mointain Lion - Lua 5 ...
- Lua环境搭建之使用EditPlus搭建Lua开发环境
luatools正则表达式extension工具encoding 一.语法高亮 打开 EditPlus,Tools 工具-->Preferences首选项==>setting & ...
随机推荐
- mmdetection3d安装
conda create -n openmmlab python=3.7 -y conda activate openmmlab pip install torch==1.8.1+cu101 torc ...
- js右键生成菜单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- .netcore webapi的返回值和过滤器
1.返回值. 1.1直接返回数据 1.2 数据+状态码 返回这种类型IActionResult 可以使用return OK(T).return NotFound(T) 1.3前两种的混合使用Actio ...
- php redis使用 常用方法 | Windows环境下安装Redis | Windows下php安装redis扩展(详解版)
redis可视化工具:http://www.treesoft.cn/dms.html #php redis使用 常用方法 https://www.cnblogs.com/mg007/p/1043107 ...
- Spark On Hive
配置 MySQL 通过官网下载并解压: tar -zxvf mysql-8.0.31-el7-x86_64.tar.gz -C /usr/local 重命名: mv mysql-8.0.28-el7- ...
- jQuary学习(一)
一.jQuary简介 jQuery是继prototype之后又一个优秀的Javascript框架.其宗旨是--WRITE LESS,DO MORE,写更少的代码,做更多的事情. jQuery能够使用户 ...
- List集合转换成数组
我现在有个需求:将File集合转换成MultipartFile数组结构 然后我就开始在网上开启了List转换到数组之旅. 首先来看一个例子 ArrayList<String> list=n ...
- 钉钉-E应用开发初体验(企业内部应用)
首先要创建应用,如何创建参考 https://open-doc.dingtalk.com/microapp/bgb96b/gt5d6a 下载 钉钉E应用服务端demo git clone http ...
- QDateEdit
self.dateEdit.setCalendarPopup(True) # 日历增加 # 日历转化位str类型begintime = self.dateEdit.dateTime().toStrin ...
- 2022-04-11内部群每日三题-清辉PMP
1.项目经理从制造商那里收到一个更新信息,说一个必要的设备修理可能会导致他们的可交付成果迟八周时间.项目经理应该怎么做? A.确定关键路径 B.实施沟通管理计划 C.执行假设情景分析 D.对项目进度赶 ...