2016-10-20 2 views
0

의 배열을 호출하면 나는 두 가지 방법이 있다고 가정하자 오류가 발생하면 코드 블록을 다시 시도하는 메서드입니다. 이러한 방법이 많이 있으므로 블록을 반복 할 수 있습니까? 뭔가 같이 : 당신은루비는 반복 및 방법

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

을 할 수

array_of_methods = [hello,world] 

답변

1

그리고 당신은

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

주 :이 대답으로'method (: hello)'는'hello' 메소드의 객체이며 메소드를 직접 호출하지 않습니다. 이 메소드로 무엇을 할 것인지에 대한 옵션이 더 많으므로이 방법이 매우 유용합니다. 그러나 메소드 만 호출하는 경우'send'를 사용하는 것이 더 효율적입니다. –

0
처럼 그들을 호출 할 수 있습니다

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

문제는 방법이 라인에서 평가받을 것입니다

당신은 그는 helloworld을 사용합니다. 당신이 그들을 반복하면서 이러한 메소드를 호출 할 경우, 당신은 public_send 소위 얻을 당신이 개인 또는 보호 방법을 허용하고 싶지 않을 수도 메소드 이름의이 배열의 원산지에 따라 같은

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

메소드 이름은 일반적으로 기호입니다. 게다가''try_retry {...} '에서''send' '를 호출하여 실제로 OP 문제를 해결해야합니다. – Stefan

0

로 그것을 할 수 있습니다 public 메소드 만 호출 할 수 있습니다.

array_of_methods = ['hello', 'world'] 

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