1

次のような関数参照の表があります。

KLC.ChatCommandBank = {
test = KLC.TestFunction,
config = KLC.OpenInterfaceOptions,
option = KLC.OpenInterfaceOptions,
options = KLC.OpenInterfaceOptions,
help = KLC.PrintHelp
};

しかし、f = "test"andtが文字列のテーブルで、私が呼び出す場合

KLC.ChatCommandBank[f](t);

次に関数

function KLC:TestFunction(tab)
    print(tab);
end

は、関数が呼び出されたときに ではないという事実にもかかわらず、のnil値を持っています。tabtnil

これは、関数参照のテーブルに引数が定義されていないことが原因であると思われます。私はグーグルで何も見つけることができず、私自身のいじくり回しではそれを修正できませんでした! 任意の入力をいただければ幸いです

4

1 に答える 1

2

これは、関数を定義すると、関数が呼び出されたテーブルを参照するKLC:TestFunction(tab)1 つの暗黙的なパラメーターを取得するためです。self

として呼び出す場合はKLC.ChatCommandBank[f](t)、そのパラメーターの代わりに何かを明示的に渡す必要があります。

KLC.ChatCommandBank[f](KLC, t)

または、定義を に変更することもできますlocal function KLC.TestFunction(tab)

于 2013-06-18T03:19:04.620 に答える