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 & ...
随机推荐
- k8s_使用k8s部署博客系统svc、secret、configmap(三)
service service是抽象Pod对外提供服务的地址,将其固化的作用:屏蔽因pod的创删以及扩缩容带来ip变化.service通过自身定义文件的selector的标签配置匹配到需要提供服务的对 ...
- exe可执行文件反编译成py文件
记录一下exe文件反编译的问题 准备工作 1. 安装第三方包 uncompyle6 (pip install uncompyle6==3.7.4) 2. 下载pyinstxtractor.py文件 3 ...
- mybatis原理探究
jdbc数据库运行流程: JDBC有哪三种statement接口: Statement 1.Statement接口提供了执行语句和获取结果的基本方法: 2.Statement继承自Wrapper:3. ...
- google filament pbr
https://google.github.io/filament/Filament.md.html
- 两个DIV的切换
<html><head><title>HTML元素的显示与隐藏控制</title><script type="text/javascri ...
- 把VScode插件提示abc的提示给移到最后
把VScode插件提示abc的提示给移到最后 解决方法 打开设置,在搜索中输入editor.snippetSuggestions,然后将选项改为top,就可以解决了 top:就是将你插件提示放到最上面 ...
- css盒子在不同浏览器下的差异
标准盒子模型 盒子模型的氛围包括四个部分:margin,border,padding,content 标准盒子模型的content不包括其他内容,只有width跟height部分 conten ...
- web server 接口调用
1. 生成客户端代码 2.调用接口 import javax.xml.ws.Service;public static NotificationServiceDevImplPortType mokaA ...
- 【Java】【Mybatis】如何调用存储过程和存储函数
https://www.jb51.net/article/230756.htm Mybatis调用存储过程 MyBatis支持使用存储过程的配置.当使用存储过程时,需要设置一个参数"mode ...
- memoのPython环境配置
Python环境配置 属予作文以记之. 首先 打开网页 https://mirrors.tuna.tsinghua.edu.cn 浏览一下,都是好东西. 把这个网址保存为书签,经常要用的. 有条件的话 ...