2013-01-10 215 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

相關問題