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?

Était-ce utile?

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
scroll top