带有参数的Ruby instance_exec / instance_eval

时间:2011-12-04 16:50:42

标签: ruby arguments instance-eval

我正在尝试使用相同字符串中给出的参数动态调用字符串中给出的方法,但我仍然坚持提供参数...

我目前有:

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),此方法的参数位于输入的其余部分。 有没有办法用这些参数调用这个方法?

1 个答案:

答案 0 :(得分:1)

您要查找的方法是send。它的第一个参数是方法,其余的将传递给该方法。

query = Query.new
puts query.send(*gets.split(/\s+/)) while true
  • 您可以使用while修饰符。
  • 你的正则表达式很复杂。我让它看起来很简单。
  • 不要忘记使用splat运算符*来解析数组。