Ruby instance_exec / instance_eval с аргументами - PullRequest
1 голос
/ 04 декабря 2011

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

В настоящее время у меня есть:

query = Query.new

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

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

1 Ответ

1 голос
/ 04 декабря 2011

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

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