Ruby exaction_exec / exaction_eval с аргументами
-
28-10-2019 - |
Вопрос
Я пытаюсь динамически вызвать метод, приведенный в строке, используя параметры, приведенные в той же строке, я застрял на поставке параметров, хотя ...
У меня сейчас есть:
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
*
, который разлагает массив.
Не связан с StackOverflow