Lua能够支持大小写不敏感的方法调用吗?
2012-2-1 20:34:58
收藏:0
阅读:117
评论:1
我正在将Lua用作我的C++应用程序的数据描述语言。我使用SLB 2.0将一堆C++类绑定到Lua上。我已经绑定了方法,如'SetPos'或'SetName'。我使用一个包含以'pos'或'name'为键的值的表来指定位置或名称(例如)。如果它存在(可能不存在),我想能够使用键名前缀'set',并调用该方法。这可能吗?如果可以,有什么建议吗?
我知道我可以使我的绑定方法小写,但我宁愿将它们保持与绑定到它们的方法相同(那可能是我的后备计划)。我可以尝试根据我的命名标准构建方法名称,但不区分大小写的方式更少出错。
我觉得应该有一个巧妙的Lua片段可以使用元表来解决这个问题,但我自己还没有能够解决它。
有什么建议吗?
谢谢!
原文链接 https://stackoverflow.com/questions/9102931
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
大小写不敏感并不是 Lua 能够处理的。所有的表查找和本地变量访问最终都是对大小写敏感的字符串比较。
最好的解决方案是接受你正在处理一个大小写敏感的系统,就像 C++ 一样,然后处理它。
然而,如果你真的想要的话,你可以这样做。最简单的方法是将一个名称的每个可能情况的大小写组合放入你的函数表中。所以你的函数表将是这样的:
["setname"] = theFunction, ["Setname"] = theFunction, ["sEtname"] = theFunction, ["SEtname"] = theFunction, ...
当然,你可以通过一个函数自动完成它,该函数通过大小写组合来复制表中每个名称的数据。
一个更加复杂但更容易使用的机制是使用
__index
和__newindex
元方法以及一个空表技巧。function CreateCaseInsensitiveTable() local metatbl = {} function metatbl.__index(table, key) if(type(key) == "string") then key = key:lower() end return rawget(table, key) end function metatbl.__newindex(table, key, value) if(type(key) == "string") then key = key:lower() end rawset(table, key, value) end local ret = {} setmetatable(ret, metatbl) return ret end
你不再使用 {} 创建表,而是使用这个函数调用来创建表。该表应该像普通表一样工作(虽然显然成员访问会稍微慢一些)。