2013-01-10 216 views
2

我正在使用Ruby on Rails 3.2.9和Ruby 1.9.3。我试图实现一种方法,在该方法中运行send方法,并且我想传递给传递给下级方法的参数的“发送”方法全部参数。也就是说,给定如何传递参数传递给另一个方法?

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

话,我想通过所有参数传递给method1(在这种情况下,arg1, arg2 = true, *args)的method2

如何应该我做到了吗?例如,是否有可能在send上使用Ruby“splat”功能?

+0

的可能的复制[红宝石:我如何通过一个方法收到另一个所有参数和块?](HTTP:/ /stackoverflow.com/questions/4683844/ruby-how-do-i-pass-all-parameters-and-blocks-recieved-by-one-method-to-another) –

回答

4

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

method1(arg1, arg2 = true, *args) 

那么你可以做

self.class.send(:method2, arg1, arg2, *args) 
+0

我正在寻找将所有参数传递给'方法2“,无论参数传递给'method1'。 *顺便说一句*:我更新了问题,以便不强调方法签名。 – Backo

+0

实际上,ruby 1.9在开始时允许默认参数(例如,请参阅http://www.igvita.com/2011/02/03/new-ruby-19-features-tips-tricks/) –

+0

@Backo您可以执行一些使用'Method#parameters'和'eval'的方法,但我不明白为什么你需要这样做。如果你在'method1'中编写代码,那么你就知道它接受了什么参数,所以你可以像上面的答案那样做。也许你需要给出一个更具体的例子来说明你想要做什么? – mikej

相关问题