루비에는 반복을 통해 직접 결과를 반환하는 좋은 방법이 많이 있습니다. 이것은 주로 배열 메소드를 포함합니다. 예를 들어 :while 루프를 사용하여 Ruby 배열을 만드는 가장 깨끗한 방법은 무엇입니까?
def ten_times_tables
(1..5).map { |i| i * 10 }
end
ten_times_tables # => [10, 20, 30, 40, 50]
그러나, 가끔 while
를 사용하여 반복하고 직접 결과 배열을 반환합니다. 예를 들어, 배열의 내용은 예상 최종 값 또는 일부 누산기 또는 제어 외부의 조건에 따라 달라질 수 있습니다. , 접근의이 종류가 꽤 느낌 "유엔 - 루비"나에게
def fibonacci_up_to(max_number)
sequence = [1, 1]
while sequence.last < max_number
sequence << sequence[-2..-1].reduce(:+)
end
sequence
end
fibonacci_up_to(5) # => [1, 1, 2, 3, 5]
: 같은
A (인위적인) 예 보일 수 있습니다. 배열을 만들고 이름을 지정하고 나중에 배열을 반환한다는 사실은 반 패턴처럼 느껴집니다. 지금까지 최고의 내가 tap
을 사용하고 가지고 올 수 있지만, 그것은 여전히 매우 구역질 (아주 중첩) 느낌 :
def fibonacci_up_to(max_number)
[1, 1].tap do |sequence|
while sequence.last < max_number
sequence << sequence[-2..-1].reduce(:+)
end
end
end
다른 사람이 문제가 이런 종류의 어떤 영리 솔루션이 있습니까? 워드 프로세서
을 : 당신의 인위적인 예제가되도록 (어쩌면 당신의 인위적인 예는 실제 사용 사례에 비해이 훨씬 더 적합하지만)이 같은 상황을 조사 할 수 있습니다
귀하의 인위적인 시나리오입니다. 따라서 결과를 얻기위한 코드는 약간 특이한 것처럼 보입니다. 그러나 나는 당신의 원래 접근법이나 그것을 개선하기위한 중요한 방법에 특히 잘못된 것을 보지 못합니다. –