2014-01-18 2 views
3

Ruby에서 메소드를 작성할 때 종종 "더 간단해질 것"이라고 생각합니다. 다음은 한 가지 예제 방법입니다. 숫자가 n까지 1부터 시작하는 모든 숫자를 추가합니다. 변수 solution을 남겨 둘 수있는 방법이 있습니까?Ruby 메소드 간소화 : 불필요한 변수를 사용하지 말것

def sum n 
    solution = 0 
    for i in 1..n do 
     solution += i 
    end 
    solution 
end 

답변

11
Enumerable#inject를 사용

(또는 Enumerable#reduce) :

(1..10).inject :+ 
# => 55 
+0

나는 생각한다 ** (1..10) .inject (: +) ** – rejin

+0

그것은 괄호없이 작동한다. – ph3nx

+3

@rejin, Ruby에서 표현식이 모호하지 않은 경우 괄호를 생략 할 수 있습니다. – falsetru

2

falsetru의이 합을위한 속기 답변입니다.

이 예에서
def sum n 
    (1..n).inject {|result, i| result + i} 
end 

이 블록의 결과가 각 연속적인 반복과 같은 result에 피드백된다, 그래서 누적를 구축 :하지만 그냥 자신의 이익을 위해 그에 확장, inject는 일반적으로 더 다음과 같습니다 합계.

inject은 매우 다재다능하지만 카운트 변수를 관리하지 못하도록하는 많은 다른 반복자가 있습니다. 초보자는 times, eachmap입니다.