【问题标题】:Ruby instance_exec / instance_eval with argumentsRuby instance_exec / instance_eval 带参数
【发布时间】:2012-01-12 16:41:21
【问题描述】:

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

我目前有:

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

【问题讨论】:

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

标签: ruby arguments instance-eval


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2017-04-22
    • 2011-03-11
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多