Вопрос

Я пытаюсь динамически вызвать метод, приведенный в строке, используя параметры, приведенные в той же строке, я застрял на поставке параметров, хотя ...

У меня сейчас есть:

query = Query.new

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

Таким образом, имя метода является вводом (0), а аргументы этого метода находятся в остальной части ввода. Есть ли способ назвать этот метод с этими параметрами?

Это было полезно?

Решение

Метод, который вы ищете send. Анкет Его первым аргументом будет метод, а остальное будет передано этому методу.

query = Query.new
puts query.send(*gets.split(/\s+/)) while true
  • Вы можете использовать while модификатор.
  • Ваша режима выглядит сложной. Я сделал это просто.
  • Не забудьте использовать оператора SPLAT *, который разлагает массив.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top