Fox*_*Fox 5 variables lua for-loop
我设置了一些这样的变量:
local var1Age = 10
local var2Age = 20
local var3Age = 30
Run Code Online (Sandbox Code Playgroud)
现在我想用这样的循环迭代它们:
for i=1, 3 do
if var..i..Age >= 21 then
print("yep")
end
end
Run Code Online (Sandbox Code Playgroud)
我无法更改变量,也无法创建表格.这个变量有可能吗?
编辑: 我可以这样做:
if var1Age >= 21 then
print("yep")
end
if var2Age >= 21 then
print("yep")
end
if var3Age >= 21 then
print("yep")
end
Run Code Online (Sandbox Code Playgroud)
但我有~50个这样的变量.这就是我搜索循环方式的原因.
Edit2: vars是由我无法改变的类设置的,因此我无法改变vars的设置方式.例如,我不能像这样设置变量:
local varAge = {}
varAge[1] = 10
varAge[2] = 20
varAge[3] = 30
Run Code Online (Sandbox Code Playgroud)
Edit3: 该类将vars保存在如下表格中:http://ideone.com/iO4I8N
您可以通过名称来迭代所有局部变量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
Run Code Online (Sandbox Code Playgroud)
根据您在此处的评论中提供的示例代码,您应该能够迭代数据结构而无需使用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
Run Code Online (Sandbox Code Playgroud)
无论DTClass是表还是用户数据,假设它提供了合适的__index. 当然,您需要某种方法来确定 DTClass 中的总元素。只需实现该varcount功能即可执行此操作。
如果DTClass是一个表,varcount可以像这样简单return #DTClass / var_fields。