2013-03-22 2 views
0

테스트가 참일 경우 1을, 그렇지 않은 경우 0을 넣고 싶습니다. 또한 테스트가 성공할 때마다 카운트하는 카운터를 증가시키고 싶습니다. 지금은이 권리가 있습니다 : 루비 삼항 연산자를 사용하여 값을 입력하고 변수를 증가 시키십시오.

puts test1 ? sum += 1 : 0 
puts test2 ? sum += 1 : 0 
puts test3 ? sum += 1 : 0 
puts test4 ? sum += 1 : 0 

Obvoiusly 문제 내가 합 매번 증가하고있어 있다면, 내가 1을 인쇄하고 있지 않다 그러나 합 오히려 값이다.

나는 합계를 증가 약간의 방법을 시도하고이 같은 일 반환

def inc_sum_ret_1(sum) 
    sum += 1 
    1 
end 

을하고 "합계 + = 1"대신했다. 물론 이것은 매번 0에서 1까지만 증가합니다.

이렇게하는 좋은 방법이 있습니까? 특히 코드를 깔끔하게 만드는 것보다 지적 관점에서 더 궁금합니다.

답변

4

글쎄, 난 당신이 작성하려는 코드가

puts test1 ? (sum += 1; 1) : 0 
puts test2 ? (sum += 1; 1) : 0 
puts test3 ? (sum += 1; 1) : 0 
puts test4 ? (sum += 1; 1) : 0 

입니다 그러나 물론이 코드의 큰 비트가 아니라고 생각. 코드 명확성과 반복 제거면에서 if을 사용하는 것이 훨씬 더 좋습니다.

+0

이것은 훌륭합니다.하지만 왜 괄호가있는 블록에 중괄호를 사용하려고했는데 루비가 막혔습니까? – Ramy

+1

@Ramy : 이것은 블록이 아니기 때문에 단지 표현식 그룹 일뿐입니다. 블록은 구문 적으로 메시지 전송을 따를 수 있으며,'? '는 없다. – Chuck

+0

척 (Chuck)이 말했듯이 "이것은 대단한 코드가 아닙니다." 실제 코드에서 실제로하고 싶은 것이 아닙니다. 예, 작동하지만 읽거나 이해하기가 쉽지 않으므로 이와 같은 코드를 작성하는 습관을 가지지 마십시오. 명확하고 깨끗하게 작성하십시오. 노화 두뇌는 나중에 당신에게 감사 할 것입니다. –

관련 문제