Lua &引用;尝试调用一个nil值";执行泛型循环时

Lua &引用;尝试调用一个nil值";执行泛型循环时,lua,Lua,我在Lua(标准对讲机)上遇到了一个错误,我找不到问题的根源。我正在尝试从Java、C#等语言创建类似于枚举的东西。我必须定义枚举标准的当前代码如下: enum = { new = function (self, ...) local o = {}; setmetatable(o, self); self.__index = self; for k,v in args do -- THIS LINE IS GIVING TH

我在Lua(标准对讲机)上遇到了一个错误,我找不到问题的根源。我正在尝试从Java、C#等语言创建类似于枚举的东西。我必须定义枚举标准的当前代码如下:

enum = {
    new = function (self, ...)
        local o = {};
        setmetatable(o, self);
        self.__index = self;
        for k,v in args do -- THIS LINE IS GIVING THE ERROR
            self[v] = 2^k;
        end
        table.sort(self, function(a,b) if a>b then return true; else return false; end end)
        return o;
    end,
    sum = function (self, ...)
        local s
        for k,v in args do
            s = s+self[v];
        end
    end,
    expand = function (self, number)
        indices = {};
        for k,v in ipairs(self) do
            if v < number then
                table.append(k);
                number = number-v;
            end
        end
        return unpack(indices);
    end
}

我应该注意的是,错误只是说明标题上的内容,没有变量名或任何内容。

首先,类型为
for k,v in…
的for循环希望使用迭代器函数,而不是表;其次,
args
在您引用它时是未设置的。如果要将varargs循环到函数,请在ipairs({…})中对k,v使用


请注意,如果其中一个vararg为nil,则使用
ipairs
进行迭代可能会在nil处停止,并且使用
进行迭代不能保证以与传递vararg相同的顺序返回vararg。如果这是一个问题,可以找到解决方法。

谢谢您的简明回答!
myEnum = enum:new("a","b","c");