Variables 在没有索引的情况下遍历变量?
我设置了一些变量,如下所示:Variables 在没有索引的情况下遍历变量?,variables,for-loop,lua,Variables,For Loop,Lua,我设置了一些变量,如下所示: 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 v
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
local varAge = {}
varAge[1] = 10
varAge[2] = 20
varAge[3] = 30
现在我想用这样的循环来迭代它们:
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
local varAge = {}
varAge[1] = 10
varAge[2] = 20
varAge[3] = 30
我不能更改变量,也不能创建表。这辆车有可能吗
编辑:
我可以这样做:
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
local varAge = {}
varAge[1] = 10
varAge[2] = 20
varAge[3] = 30
但我有大约50辆这样的车。这就是为什么我要寻找一种使用循环的方法
Edit2:
变量是由一个我无法更改的类设置的,因此我无法更改变量的设置方式。
例如,我不能这样设置变量:
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
local varAge = {}
varAge[1] = 10
varAge[2] = 20
varAge[3] = 30
Edit3:
该类将变量保存在如下表中:您可以通过debug.getlocal迭代所有局部变量,并按名称筛选您感兴趣的变量 下面是如何使用它的示例
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
您真的确定要将语言使用扩展到这一步吗?当您无法使用
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( level )
local result = {}
for i = 1, math.huge do
local name, value = debug.getlocal( level, i )
if not name then break end
result[ name ] = value
end
return result
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
根据您在评论中提供的示例代码,您应该能够迭代数据结构,而无需使用
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
是一个表还是一个用户数据,只要它提供了一个合适的\u索引,这都应该有效。当然,您需要某种方法来确定DTClass中的所有元素。只需实现varcount
函数即可完成此操作
如果DTClass
是一个表,varcount
可以像return#DTClass/var_字段
一样简单,这不是我需要的。我知道变量,但不能更改它们。或者你的问题没有描述你“需要”的内容,或者你只是不知道这个函数允许你完全按照你的要求来做。我没有用var..I..Age尝试过,它不会指向变量,或者会吗?oO如果是,我回答了我自己的问题xDinput:6:尝试连接全局“Age”(一个nil值)不,我没有。@Fox它不是局部变量,它是一个带有自定义字段的局部表。按照预期工作,它是一个单独的用例(比您原来的用例简单得多),我完全知道这一点。但是变量是由一个我无法更改的类设置的,所以我必须像访问它们一样访问它们。@Fox。好啊你真的达到了我在回答中提到的一个高级用途,然后:-)。请考虑在你的问题中添加这个信息(即使用的上下文),这样问题会在下一个读者中显得十分复杂。你能演示一下这个类是如何生成这些变量名的吗?@ GrimWood,如果你是这样的话,我不能给这个类一个表。我只能给出一个字符串,而var就是这样调用的。@Fox不,我的意思是显示一个实际的最小示例,说明如何从类中获取这些变量。把它加到你的问题上。我们也许能想出其他想法。所有这些变量都是局部的?是的。在当前的范围内有一个设置。从未想过这一点,但你是对的!这是解决我问题的最好办法,谢谢^^