Pregunta

Estoy tratando de llamar dinámicamente un método dado en una cadena usando parámetros dados en la misma cadena, aunque me estoy atascando al proporcionar los parámetros ...

Actualmente tengo:

query = Query.new

while true
  input = gets.split(%r{[/[[:blank:]]/,]})
  puts (query.instance_exec(*input.drop(1)) { |x|
    instance_eval input.at(0)
  })
end

Entonces, el nombre del método es la entrada (0) y los argumentos a este método están en el resto de la entrada. ¿Hay alguna forma de llamar a este método con esos parámetros?

¿Fue útil?

Solución

El método que está buscando es send. Su primer argumento será el método, y el resto se pasará a ese método.

query = Query.new
puts query.send(*gets.split(/\s+/)) while true
  • Puedes usar while modificador.
  • Tu regex parece complicado. Lo hice parecer simple.
  • No olvides usar el operador Splat *, que descompone una matriz.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top