Lua を使用して、パラメーターを使用して関数を動的に呼び出そうとしています。次の方法で解析する文字列を送信したい:
- 第1引数はクラスインスタンス「Handle」
- 2番目は呼び出される関数です
- 残っているのは引数だけです
「modules」は、{ string=<instance of a class> }
split() のようなテーブルであり、インデックス付きの文字列を含むテーブルを返す単純なパーサーです。
function Dynamic(msg)
local args = split(msg, " ")
module = args[1]
table.remove(args, 1)
if module then
module = modules[module]
command = args[1]
table.remove(args, 1)
if command then
if not args then
module[command]()
else
module[command](unpack(args)) -- Reference 1
end
else
-- Function doesnt exist
end
else
-- Module doesnt exist
end
end
これを「ignore remove bob」で試してみると、「参照 1」によると、モジュールの「ignore」に関連付けられたインスタンスで「remove」を呼び出そうとし、テーブルに含まれる引数「bob」を与えます (単一の値)。
ただし、呼び出しの反対側では、remove 関数は引数を受け取りません。「参照1」行を次のように置き換えようとさえしました
module[command]("bob")
しかし、私は同じ結果を得ます。
引数を受け取らない他の関数は次の"bob"
とおりです。
function TIF_Ignore:remove(name)
print(name) -- Reference 2
TIF_Ignore:rawremove(name)
TIF_Ignore:rawremovetmp(name)
print(title.. name.. " is not being ignored.")
end
何が問題なのかを理解しようとしていたときに、コードに「参照 2」を追加しました。「ボブの削除を無視」するか、「参照 1」で「unpack(args)」を「ボブ」に置き換えても、「削除」の変数「名前」はまだ nil です。