2

我正在使用 Ruby on Rails 3.2.9 和 Ruby 1.9.3。我正在尝试实现一个运行方法的send方法,并且我想将传递给底层方法的所有参数传递给“sent”方法。也就是说,给定

def method1(arg1, arg2 = true, *args)
  # ...
  self.class.send(:method2, # passing all arguments passed to method1, whatever those are)
end

然后我想将传递给(在本例中为)的所有参数传递给.method1arg1, arg2 = true, *argsmethod2

我该怎么做例如,是否可以使用 Ruby “splat” 功能send

4

1 回答 1

4

您当前的方法签名method1(arg1 = true, arg2, *args)无效,因为如果您还使用 splat 可选参数,则具有默认值的参数必须位于所需参数之后。但是,如果您将其更改为:

method1(arg1, arg2 = true, *args)

那么你可以做

self.class.send(:method2, arg1, arg2, *args)
于 2013-01-10T08:22:51.623 回答