Je développe une application Ruby où j'appelle dynamiquement des méthodes basées sur des données JSON. Librement:Détermination de l'arithme de la méthode avec les arguments du mot-clé
def items
# do something
end
def createItem(name:, data:nil)
# do something that requires a name keyword argument
end
def receive_json(json) # e.g. { "cmd":"createItem", "name":"jim" }
hash = JSON.parse(json)
cmd = hash.delete('cmd')
if respond_to?(cmd)
params = Hash[ hash.map{ |k,v| [k.to_sym, v } ]
method(cmd).arity==0 ? send(cmd) : send(cmd,params)
end
end
Comme indiqué ci-dessus, certaines méthodes ne prennent pas d'arguments, et certains prennent des arguments clés. Sous Ruby 2.1.0 (où je développe) le arity
des deux méthodes ci-dessus est 0
. Cependant, si je send(cmd,params)
toujours, j'obtiens une erreur pour les méthodes qui ne prennent aucun paramètre.
Comment puis-je utiliser send
pour transmettre correctement les arguments du mot-clé lorsque cela est souhaité, mais les omettre dans le cas contraire?
Ce. 'arity' a été obscure depuis que l'introduction de paramètres optionnels avec des arguments par défaut, est devenue obsolète avec l'introduction de' parameters' et est maintenant complètement inutile après l'introduction de paramètres de mot-clé. –