0

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
}

错误出现在new函数中,在循环语句中(而不是其中的语句)。这可能是什么原因?我不是在“调用”这些值,只是引用它们。我也尝试用 替换2^kmath.pow(2,k)所以这也不是数学。我运行以下代码来测试脚本:

myEnum = enum:new("a","b","c");

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

4

1 回答 1

2

首先,该类型的 for 循环for k,v in...需要一个迭代器函数,而不是一个表;其次,args当您引用它时未设置。如果要将可变参数循环到函数,请使用for k,v in ipairs({...}).

请注意,如果其中一个可变参数为 nil,则迭代ipairs可能会在 nil 处停止,并且pairs不能保证迭代以它们传递的相同顺序返回可变参数。如果这是一个问题,可以在此处找到解决方法。

于 2013-01-28T00:29:32.163 回答