2011-01-11 20 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

このようなことをしていますか?

9に開始するすべての方法まで、 2で開始し、その後、 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の値が実際には変更されないように見えるので、これを書き換えるには2通りの方法があります。ループが始まる前にx >= 10のいずれかが実行されることはなく、単に何も置き換えられません。

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

:そうでなければ、あなたが事前にxの値がわからない場合、あなたは、単にループを条件付きにすることができ、それは無限ループだし、それを書くための最も慣用的な方法は、

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

ですxがメソッドの戻り値を変更するメッセージを送信する場合は、余分な中カッコを削除する以外にコードを改善するための明白な方法はありません。

関連する問題