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?

È stato utile?

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