Ruby instance_exec / instance_eval avec des arguments
-
28-10-2019 - |
Question
Je suis en train d'appeler dynamiquement une méthode donnée dans une chaîne à l'aide des paramètres donnés dans la même chaîne, je suis en train coincé sur la fourniture des paramètres si ...
J'ai actuellement:
query = Query.new
while true
input = gets.split(%r{[/[[:blank:]]/,]})
puts (query.instance_exec(*input.drop(1)) { |x|
instance_eval input.at(0)
})
end
Ainsi, le nom de la méthode est entrée (0) et les arguments de cette méthode sont dans le reste de l'entrée. Est-il possible d'appeler cette méthode avec ces paramètres?
La solution
La méthode que vous recherchez est send
. Son premier argument sera la méthode, et le reste sera transmis à cette méthode.
query = Query.new
puts query.send(*gets.split(/\s+/)) while true
- Vous pouvez utiliser le modificateur de
while
. - Votre apparence regex compliquée. Je l'ai fait regarder simple.
- Ne pas oublier d'utiliser l'opérateur de floc
*
, qui se décompose un tableau.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow