2011-01-11 3 views
1

Я хотел бы знать, есть ли какой-либо элегантный способ реализовать цикл для следующего метода. Я могу только придумать, регулярной во время цикла (Java программист) в качестве следующего псевдокода:Самый удобный и эффективный способ реализации цикла в Ruby

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

Кто-то знает лучше?

+1

Есть что-то неладное с этим пседокодом. Вы никогда не меняете 'x' нигде. Поэтому, если x <10 при запуске цикла, цикл будет работать бесконечно. Если x> = 10 при запуске цикла, он вообще не запускается. –

+0

Google :: Search :: Web не имеет атрибута начала. https://github.com/visionmedia/google-search/blob/master/lib/google-search/search/base.rb –

+0

Я настроил библиотеку. Я должен был добавить заявление, которое изменит значение X. Спасибо всем! – mabounassif

ответ

2

Вы хотите сделать что-то вроде этого?

(1..9).each do |i| 
    search = Google::Search::Web.new() 
    search.query = "china" 
    search.start = i 
end 

Это будет выполнить запрос с началом в 1, а затем начать в 2, вплоть до запуска в 9. Синтаксис 1..9 - это диапазон, включающий с обеих сторон.

ОБНОВЛЕНИЕ: (1..9).each, вероятно, наиболее идиоматических способ сделать это в рубин, но Jonas 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 

Целые числа имеют метод times, который принимает блок и петли n раз whe re n - это число.

0

Поскольку это не похоже на то, что значение x никогда не меняется, существует два возможных способа переписать это. Либо x >= 10 до начала цикла, то он никогда не будет запущен, и его можно просто заменить ничем. В противном случае, это бесконечный цикл, и наиболее идиоматических способ написать что

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

Если вы не знаете значение x заранее, вы можете просто сделать петлю условной:

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

Если x - это сообщение, чей метод изменяет его возвращаемое значение, тогда я не вижу очевидного способа улучшить ваш код, кроме удаления лишних фигурных скобок.

Смежные вопросы