Ruby Instance_Exec / Instance_eval con argomenti
-
28-10-2019 - |
Domanda
Sto cercando di chiamare dinamicamente un metodo indicato in una stringa usando i parametri indicati nella stessa stringa, mi blocco sulla fornitura dei parametri ...
Attualmente ho:
query = Query.new
while true
input = gets.split(%r{[/[[:blank:]]/,]})
puts (query.instance_exec(*input.drop(1)) { |x|
instance_eval input.at(0)
})
end
Quindi il nome del metodo è input (0) e gli argomenti di questo metodo sono nel resto dell'input. C'è un modo per chiamare questo metodo con quei parametri?
Soluzione
Il metodo che stai cercando è send
. Il suo primo argomento sarà il metodo e il resto sarà passato a quel metodo.
query = Query.new
puts query.send(*gets.split(/\s+/)) while true
- Puoi usare
while
modificatore. - Il tuo regex sembra complicato. L'ho reso semplice.
- Non dimenticare di usare l'operatore Splat
*
, che decompone un array.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow