0

Lua(標準のinterprteter)でエラーが発生し、問題の原因を見つけることができません。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^kてみmath.pow(2,k)たので、数学でもありません。次のコードを実行して、スクリプトをテストします。

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

エラーは単にタイトルに何があるかを示しており、変数名などは何も示していないことに注意してください。

4

1 に答える 1

2

まず、このタイプのforループはfor k,v in...、テーブルではなくイテレータ関数を受け取ることを想定しています。第二に、argsあなたがそれを参照するときに設定されていません。varargsを関数にループする場合は、を使用しますfor k,v in ipairs({...})

varargsの1つがnilの場合、withの反復はnilでipairs停止する可能性があり、withの反復pairsは、渡されたのと同じ順序でvarargsを返すことが保証されないことに注意してください。これが問題になる場合は、回避策をここで見つけることができます。

于 2013-01-28T00:29:32.163 に答える