2011-12-04 226 views
1

我想动态调用中使用相同的字符串给定的参数字符串给定的方法instance_eval的,我陷入上虽然提供的参数...红宝石instance_exec /带参数

我现在有:

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

+0

你的输入字符串是什么样的?我只问,因为你的正则表达式有点奇怪。 –

+0

该字符串看起来像'method_name paramList',其中paramList是由逗号,空格或两者混合分隔的可变数量的参数。所以正则表达式应该将其分解为一个[method_name,param1,param2,...]形式的数组。 PS:它实际上应该是'%r {[/ [[:blank:]] /,] +}'我同时修正了这个问题。 – Ramses

回答

1

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

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

这让我接触到解决方案,谢谢! – Ramses