En utilisant Lua, j'essaie d'appeler dynamiquement une fonction avec des paramètres. Je veux envoyer une chaîne à analyser d'une manière qui:Lua: Appel dynamique d'une fonction avec des arguments
- 1er argument est une instance de classe « poignée »
- 2 est la fonction à appeler
- Tout ce qui reste sont des arguments
"modules" est aa table comme { string=<instance of a class> }
split() est un analyseur simple qui retourne une table avec des chaînes indexées.
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
Lorsque je tente avec « ignorer supprimer bob », par « Référence 1 », il essaie d'appeler « supprimer » sur l'instance associée à « ignorer » dans les modules, et donne l'argument « bob », contenu dans une table (avec une seule valeur).
Cependant, de l'autre côté de l'appel, la fonction remove ne reçoit pas l'argument. J'ai même essayé de remplacer la ligne "Reference 1" par
module[command]("bob")
mais j'obtiens le même résultat.
est ici l'autre fonction, qui ne reçoit pas l'argument "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
I ajouté « Référence 2 » dans mon code quand je tentais de comprendre ce qui était faux. Quand je fais "ignore remove bob", ou quand je remplace le "unpack (args)" par "bob" sur "Reference 1", la variable "name" dans "remove" est toujours nulle.
Votre code semble correct. A quoi ressemble "l'autre côté". –
Et à quoi ressemble la fonction 'split', car elle ne fait pas partie du standard Lua. –