2011-08-15 1 views
2

z이 참일 경우 x if y을 실행하고 z가 거짓 인 경우 x unless y을 실행하고 싶습니다.참 값을 기반으로 "if"또는 "unless"를 수행하는 관용적 루비 방법이 있습니까?

가장 관용적 인 방법은 무엇입니까? 내가 가지고 올 수있는 최선은 다음과 같습니다

x if z ? y : !y 
+1

나는 당신이 생각해 낸 것이 다른 제안 된 대안들보다 충분히 좋고 읽기 쉽다고 생각한다. 좀 더 읽기 쉽도록 조금 수정하면됩니다 :'x if (z? y :! y)'. – Behrang

답변

6

이 시도 :

x if !!y == !!z 

이 부울 값을 강요하기위한 표준 루비 관용구이다. yz 이미 부울 경우에, 당신은 간단하게 수행 할 수 있습니다

x if y == z 
1

이 생각의 혼란 방법처럼 보인다 그. 나에게 명확하게 정립 (루비 틱 또는 기타는)

x if (z and y) or (not z and not y) 
4

그것을 부정 다음 XOR 연산자를 사용하고 있습니다 :

x unless (!y^!z) 

것은 true이없는 것들로, 빅터의 제안에 따라 수정 , false 또는 nil^으로 자신의 작업을 수행 할 수 있습니다.

+2

(Ruby는'true'와'false' 이외의 것을 사용하는 것으로 유명합니다.) –

+1

빅터가 읽은 내용을 더 명확하게 말하면 : 루비는 모든 것이 진리 값 (즉, 참 또는 거짓 카운트가 아닌 다른 것)으로 작동하도록 허용하지만이 코드는 TrueClass, FalseClass 및 NilClass에서만 발견되는'^ '연산자의 구현에 따라 다릅니다. y가 true, false 또는 nil이 아닌 경우 예측할 수 없게됩니다. 따라서 이렇게하면 부울과 일한다는 것을 확실히해야합니다. – Chuck