带参数的Ruby实例执行/实例评估

带参数的Ruby实例执行/实例评估,ruby,arguments,instance-eval,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),该方法的参数位于input的其余部

我正在尝试使用同一字符串中给定的参数动态调用字符串中给定的方法,但是我在提供参数方面遇到了困难

我目前有:

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的其余部分。
有没有办法用这些参数调用此方法?

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

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

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

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

您的输入字符串是什么样子的?我之所以问这个问题,是因为您的正则表达式看起来有点奇怪。字符串看起来像
method\u name paramList
,其中paramList是由逗号、空格或两者混合分隔的可变数量的参数。因此正则表达式应该将其分解为一个数组,其形式为[method_name,param1,param2,…]。PS:它实际上应该是
%r{[/[:blank:][]/,]+}
我在同一时间修复了它。你的输入字符串是什么样子的?我之所以问这个问题,是因为您的正则表达式看起来有点奇怪。字符串看起来像
method\u name paramList
,其中paramList是由逗号、空格或两者混合分隔的可变数量的参数。因此正则表达式应该将其分解为一个数组,其形式为[method_name,param1,param2,…]。PS:它实际上应该是
%r{[/[:blank:][]/,]+}
我同时修正了这个问题。