2009-10-30 5 views
1

다음은 매개 변수로 피드하는 정수를 반환합니다.루비 루프가 x가 아닌 "x"이미지를 반환하도록합니다.

def space(spacer_count) 
    spacer_count.times do 
     image_tag("24gray/spacer.png", :class => "spacer") 
    end 
    end 

원하는 이미지 수를 반환하려면 어떻게해야합니까? 예 : 공간 (6)에 숫자 6이 아닌 spacer.png 여섯 개의 사본을 반환하고 싶습니다.

감사합니다. 루비 1.8.7 이상을 사용하는 경우

답변

4

당신은 모든 <img> 태그를 포함하는 단일 문자열을 반환 할 경우, 다음을 수행 할 수 있습니다

def space(spacer_count) 
    image_tag("24gray/spacer.png", :class => "spacer") * spacer_count  
end 
+0

니스 하나를 반환하는 이유 반복자는 자신에게 전달 된 것을 돌아 이니까 알고

block = Proc.new { image_tag("24gray/spacer.png", :class => "spacer")} def space(spacer_count) spacer_count.times(&block) end 

, 당신은 볼 수 있습니다! 나는이 경우에 *를 사용하는 것에 대해 생각해 본 적이 없다. –

+0

건배. 매력을 발휘했습니다. :-) –

2

는 루비와

def space(spacer_count) 
    spacer_count.times.map do 
    image_tag("24gray/spacer.png", :class => "spacer") 
    end 
end 

는 (그것은 또한 1.8.7 더 큰 작동) 해결 방법을 사용해야합니다 1.8.6. 첫 번째 해결 방법.

def space(spacer_count) 
    Array.new(spacer_count).map do 
    image_tag("24gray/spacer.png", :class => "spacer") 
    end 
end 

두 번째 해결 방법 (범위 사용).

def space(spacer_count) 
    (1..spacer_count).map do 
    image_tag("24gray/spacer.png", :class => "spacer") 
    end 
end 
2

이 좋은 답변이 이미 여기에 있습니다, 그래서 않을거야 다른 것을 줘. 그러나 여기서 잘못된 점을 이해하는 데 도움이 될 수 있습니다. Ruby의 모든 블록은 마지막 문장의 평가를 반환합니다.

times 메서드는 블록이 실행 된 횟수를 반환합니다. 각 메소드는 블록이 실행 된 배열을 반환합니다.

여기에 패턴이 표시됩니까? 이러한 반복자 메소드의 대부분은 전달 된 것을 리턴합니다.

블록은 거의 인수처럼 호출하는 함수에 전달됩니다. 본질적으로 이것은 당신의 코드에서 일어나는 일입니다. 공간 (6) 6

+0

설명 주셔서 감사합니다. –

+0

문제 없습니다. 근본 원인을 이해하는 것이 단지 문제를 해결하는 것보다 문제를 예방하는 데 훨씬 더 중요하다고 생각합니다. – EmFi

관련 문제