2011-01-11 2 views
1

다음 방법에 대한 루프를 구현하는 우아한 방법이 있는지 알고 싶습니다. 나는 단지 다음의 의사 코드와 같은 규칙적인 while 루프 (Java 프로그래머)를 생각해 낼 수있다.Ruby에서 루프를 구현하는 가장 스마트하고 효율적인 방법

while x<10  
    search = Google::Search::Web.new() 
    search.query = "china" 
    search.start = x 
end 

누군가가 더 좋은 방법을 알고 있는가?

+1

이 psedocode에는 문제가 있습니다. 어디에서나'x'를 결코 바꿀 수 없습니다. 따라서 루프 시작에서 x <10이면 루프가 무한히 실행됩니다. 루프 시작시 x> = 10이면 전혀 실행되지 않습니다. –

+0

Google :: 검색 :: Web에 시작 속성이없는 것 같습니다. https://github.com/visionmedia/google-search/blob/master/lib/google-search/search/base.rb –

+0

라이브러리를 사용자 정의했습니다. 나는 X의 가치를 바꾸는 진술을 추가해야했다. 모두에게 감사한다! – mabounassif

답변

2

이와 비슷한 것을 원하십니까?

다음, 29에서 시작까지 모든 방법을 시작, 1에서 시작과 함께 쿼리를 실행합니다
(1..9).each do |i| 
    search = Google::Search::Web.new() 
    search.query = "china" 
    search.start = i 
end 

. 1..9 구문은 범위이며 양쪽에 포함됩니다.

UPDATE는 다음 (1..9).each 아마 루비에서이 작업을 수행 할 수있는 가장 관용적 인 방법이지만, 조나스 Elfström 신속하게 몇 가지 대안을 보여줍니다 멋진 링크를 게시 :

http://alicebobandmallory.com/articles/2010/06/21/a-simple-loop

9

많은 대안 :

# Will go 0..9 
10.times do |i| 
    search = Google::Search::Web.new() 
    search.query = "china" 
    search.start = i 
end 

# Will go 1..10 
1.upto(10) do |i| 
    search = Google::Search::Web.new() 
    search.query = "china" 
    search.start = i 
end 

# Will go 1..10 
(1..10).each do |i| 
    search = Google::Search::Web.new() 
    search.query = "china" 
    search.start = i 
end 
+2

더 많은 대안 http://alicebobandmallory.com/articles/2010/06/21/a-simple-loop –

0
10.times do |i| 
    search = Google::Search::Web.new() 
    search.query = "china" 
    search.start = x 
loop 

정수는 블록과 루프를 n 번 걸리는 times 메서드를가집니다. re n은 숫자입니다.

0

x의 값이 실제로 변경되지 않는 것처럼 보일 수 있으므로 두 가지 방법으로이를 다시 작성할 수 있습니다. 루프가 시작되기 전에 x >= 10 중 하나를 실행하면 절대로 실행되지 않으며 단순히 아무것도 대체 할 수 없습니다. 그렇지 않으면 무한 루프가, 그리고 그를 작성하는 가장 관용적 인 방법은 사전에 x의 가치를 알 수없는 경우

loop do 
    search = Google::Search::Web.new 
    search.query = 'china' 
    search.start = x 
end 

, 당신은 단순히 조건 루프 할 수 있습니다 :

loop do 
    search = Google::Search::Web.new 
    search.query = 'china' 
    search.start = x 
end if x < 10 

x이 반환 값을 변경하는 메서드를 보내는 메시지 인 경우 불필요한 중괄호를 제거하는 것 이외에 코드를 개선하는 확실한 방법이 표시되지 않습니다.

관련 문제