의 배열을 호출하면 나는 두 가지 방법이 있다고 가정하자 오류가 발생하면 코드 블록을 다시 시도하는 메서드입니다. 이러한 방법이 많이 있으므로 블록을 반복 할 수 있습니까? 뭔가 같이 : 당신은루비는 반복 및 방법
array_of_methods = [method(:hello), method(:world)]
을 할 수
array_of_methods = [hello,world]
의 배열을 호출하면 나는 두 가지 방법이 있다고 가정하자 오류가 발생하면 코드 블록을 다시 시도하는 메서드입니다. 이러한 방법이 많이 있으므로 블록을 반복 할 수 있습니까? 뭔가 같이 : 당신은루비는 반복 및 방법
array_of_methods = [method(:hello), method(:world)]
을 할 수
array_of_methods = [hello,world]
그리고 당신은
array_of_methods.each { |m| m.call }
array_of_methods = [hello,world]
array_of_methods.each do |method|
try_retry{
method
}
end
문제는 방법이 라인에서 평가받을 것입니다
당신은 그는 hello
과 world
을 사용합니다. 당신이 그들을 반복하면서 이러한 메소드를 호출 할 경우, 당신은 public_send
소위 얻을 당신이 개인 또는 보호 방법을 허용하고 싶지 않을 수도 메소드 이름의이 배열의 원산지에 따라 같은
['hello', 'world'].each do |m|
send(m)
end
메소드 이름은 일반적으로 기호입니다. 게다가''try_retry {...} '에서''send' '를 호출하여 실제로 OP 문제를 해결해야합니다. – Stefan
로 그것을 할 수 있습니다 public 메소드 만 호출 할 수 있습니다.
array_of_methods = ['hello', 'world']
array_of_methods.each {|m| public_send(m)}
주 :이 대답으로'method (: hello)'는'hello' 메소드의 객체이며 메소드를 직접 호출하지 않습니다. 이 메소드로 무엇을 할 것인지에 대한 옵션이 더 많으므로이 방법이 매우 유용합니다. 그러나 메소드 만 호출하는 경우'send'를 사용하는 것이 더 효율적입니다. –