通过没有索引的变量进行迭代?

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

kel*_*tar 5

您可以通过名称来迭代所有局部变量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)


gre*_*olf 2

根据您在此处的评论中提供的示例代码,您应该能够迭代数据结构而无需使用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