2010-01-19 2 views
2

이 if 문 대신 case 문을 사용할 수 있습니까?Ruby Convert If 문을 대문자로 변환

if (a%3 == 0) then puts "%3" 
elsif (a%4 == 0) then puts "%4" 
elsif (a%7 == 0 && a%13 == 0) then puts "%%" 
+3

를 사용하지만, 더 이상 읽을 수 없습니다. 너 왜 그러고 싶어? –

답변

6
case 
    when (a % 3).zero? then puts "%3" 
    when (a % 4).zero? then puts "%4" 
    when (a % 7).zero? && (a % 13).zero? then puts "%%" 
end 
+0

이 맞지 않는다고 생각한다. 원래 코드가 아닌 그 조건 중 하나에 해당하지 않을 때 'Nil'을 출력 할 것이다. – Verhogen

+0

네 말이 맞아. puts를 case 문으로 이동하기 만하면됩니다. 그에 따라 답변을 변경했습니다. –

3

물론 : 그것은 훨씬 더

case 
when (a%3 == 0) then puts "%3" 
when (a%4 == 0) then puts "%4" 
when (a%7 == 0 && a%13 == 0) then puts "%%" 
end 

입니다되지 않는 이유는 무엇입니까? ;-)

+0

나는 slighly = p – Verhogen

0

(A == 0 % 7 & & % 13 == 0) (a * 13 % 7 == 0)와 동일하다.

루비의 경우 1 행 if-else 문을 & & 및 ||으로 사용할 수 있습니다. 그것의

puts (a%3 == 0)&&"%3"||(a%4 == 0)&&"%4"||(a%(7*13) == 0)&&"%%"||""

또는

log = (a%3 == 0)&&"%3"||(a%4 == 0)&&"%4"||(a%(7*13) == 0)&&"%%" 
puts log if log 

는 agly하지만 짧은 보인다.

2
puts [3,4,91,10].collect do |a| 
case 0 
when a % 3 then 
    "%3" 
when a % 4 then 
    "%4" 
when a % 91 then 
    "%%" 
end 
end 

작동을 보려면 해당 권한을 irb에 복사 할 수 있어야합니다. 약간의 7 * 13 = 91 해킹을 용서해주십시오. 그러나 실제 모듈로 작업하는 경우에는 동등해야합니다.

1

어쩌면 PROC 번호의 ===

def multiple_of(factor) 
    lambda{ |number| number.modulo(factor).zero? } 
end 

case a 
    when multiple_of(3): puts("%3") 
    when multiple_of(4): puts("%4") 
    when multiple_of(7*13): puts("%%") 
end 
관련 문제