不使用索引遍历变量?
2013-10-30 6:55:40
收藏:0
阅读:124
评论:3
我设置了一些变量,像这样:
local var1Age = 10
local var2Age = 20
local var3Age = 30
现在我想用循环遍历它们,像这样:
for i=1, 3 do
if var..i..Age >= 21 then
print("yep")
end
end
我不能改变变量,也不能创建表格。有没有可能用这些变量做到这一点?
编辑: 我可以做这样的事情:
if var1Age >= 21 then
print("yep")
end
if var2Age >= 21 then
print("yep")
end
if var3Age >= 21 then
print("yep")
end
但是我有大约50个这样的变量。这就是为什么我要搜索一种用循环来完成的方法。
编辑2: 变量是由我无法更改的类设置的,因此我不能更改变量设置的方式。 例如,我不能像这样设置变量:
local varAge = {}
varAge[1] = 10
varAge[2] = 20
varAge[3] = 30
编辑3: 该类将变量保存在如下表格中:http://ideone.com/iO4I8N
点赞
用户2633423
你真的确定你要这么极端地拉伸语言用法吗?使用 debug 库应该只在必须时进行高级使用。
也许你的编程问题可以使用“普通”的 Lua 设施以更优雅的方式解决。要让一系列由数字索引的变量,只需使用一个表作为数组:
local varAge = {}
varAge [1] = 10
varAge [2] = 20
varAge [3] = 30
for i = 1,#varAge do
if varAge [i] > = 21 then
print(“yep”)
end
end
编辑
如果你确实需要使用 debug.getlocal,并且性能真的很重要,那么你可以避免潜在的 O(n2)行为,只需扫描一次本地变量并将它们的值存储在表中:
local var1Age = 10
local var2Age = 20
local var3Age = 30
local function GetLocalVars(级别)
local result = {}
for i = 1,math.huge do
local name,value = debug.getlocal(level,i)
如果没有名称则打破end
result [ name ] = value
end
返回结果
end
local local_vars = GetLocalVars(2)
for i = 1,3 do
local name =“var”..i..”Age”
local v = local_vars [ name ]
if v and v > = 21 then
print(“yep”)
end
end
2013-10-28 12:19:06
用户234175
根据你在这里的评论中提供的样本代码,您应该能够在不需要使用 debug.getlocal 的情况下遍历您的数据结构。
local vars = varcount(DTClass)
for i = 1, vars do
local vari = "var" .. i
local variAge = DTClass[vari.."Age"]
if variAge and variAge >= 21 then
print(DTClass[vari.."Weight"])
end
end
假设DTClass提供了一个合适的__index,这应该适用于DTClass是表格或用户数据的情况。当然,您需要一些方法来确定DTClass中元素的总数。只需实现varcount函数即可。
如果DTClass是表格,则varcount可以简单地为return #DTClass / var_fields。
2013-10-29 01:06:39
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在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中获取用户配置主目录的跨平台方法
您可以通过
debug.getlocal遍历所有本地变量,并通过名称过滤您感兴趣的变量。http://www.lua.org/pil/23.1.1.html以下是如何使用它的示例。
local var1Age = 10 local var2Age = 20 local var3Age = 30 function local_var_value(n) local a = 1 while true do local name, value = debug.getlocal(2, a) if not name then break end if name == n then return value end a = a + 1 end end for i=1, 3 do local v = local_var_value("var"..i.."Age") if v and v >= 21 then print("yep") end end