Ruby instance_exec / instancia_eval con argumentos
-
28-10-2019 - |
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?
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