2016-10-20 32 views
0

陣列可以說我有兩種方法:紅寶石 - 迭代和調用的方法

def hello 
'hello' 
end 

def world 
'world' 
end 

現在,我想打電話給在這樣一個時尚這些方法:

try_retry{ 
    hello 
} 
try_retry{ 
    world 
} 

承擔try_retry是如果發生錯誤,該方法將重試代碼塊。有很多這些方法,所以可以迭代塊?喜歡的東西:

array_of_methods = [hello,world] 
array_of_methods.each do |method| 
    try_retry{ 
    method 
    } 
end 

問題的方法,得到在這一行評價:

array_of_methods = [hello,world] 

回答

1

你可以做

array_of_methods = [method(:hello), method(:world)] 

你可以叫他們像

array_of_methods.each { |m| m.call } 
+0

注意:有了這個答案'方法(:hello)'是方法'hello'的對象,並且不直接調用方法。這非常好,因爲你有更多的選擇來處理該方法,但如果你只是調用方法,使用'send'會更有效率。 –

0

假設你有t他的方法helloworld。如果你想調用這些方法在遍歷它們,你可以做這樣

['hello', 'world'].each do |m| 
    send(m) 
end 
+1

方法名稱通常是符號。此外,你必須在'try_retry {...}內調用'send'來實際解決OP問題。 – Stefan

0

取決於該陣列的方法名,你可能不想讓私人或保護方法的起源被調用所以public_send將只允許公開的方法被調用。

array_of_methods = ['hello', 'world'] 

array_of_methods.each {|m| public_send(m)}