2013-10-31 3 views
1

의 블록에 참/거짓 반환하는 방법 : 이해,내가 이런 걸하고 있어요 루비

myarray.delete_if{ |x| 
    #some code 
    case x 
    when "something" 
     return true 
    when "something else" 
     return false 
    end 

이 문은 잘못된 것 같다 "반환", 그리고 올바른 구문을 알아낼 수 없습니다를 단순한 형태의 : myarray.delete_if{ |x| x == y }, 진실/거짓을 반환하고자하는 욕망이 사례 진술 문에서와 같이 더 절차적일 때가 아닙니다.

+1

'myarray - [ "something"]' –

답변

4

return 만 제거하면됩니다. Ruby에서 평가 된 마지막 값이 반환 값으로 사용됩니다.

myarray = ["something", "something else", "something"] 
myarray.delete_if { |x| 
    #some code 
    case x 
    when "something" 
    true 
    when "something else" 
    false 
    end 
} 
myarray # => ["something else"] 

명시 적으로 표시하려면 next을 사용할 수 있습니다.

1

false 경우에는 특별히 조건을 지정할 필요가 없습니다. 조건을 설정하지 않으면 기본값으로 nil이 될 수 있습니다.

myarray.delete_if do |x| 
    ... 
    case x 
    when "something" then true 
    end 
end 

또는 더 나은 : 난 당신이 ... 부분에,하지만 당신은 단지 배열에서 특정 요소를 제거하려는 경우, 당신은 무엇을 할 수 있는지 모르는

myarray.delete_if do |x| 
    ... 
    "something" === x 
end 

:

myarray.delete("something") 

당신은 다음 수신기, 다시 얻으려면 :

myarray.tap{|a| a.delete("something")} 
+0

완전하게 정확하게하기 위해, case 문은 case 객체에 대해 # #== 메서드를 호출하여 작동합니다. 그러므로 스타일에서 OP의 코드 동작을 정확하게 재현하는 간단한 방법은 다음과 같습니다.'a.delete_if & "something".method (: ===) –

+0

@BorisStitnicky OP에 이전에 수행 할 몇 가지 사전 처리가있는 것처럼 보입니다. 조건부/case 문. – sawa

관련 문제