Самый умный и эффективный способ реализовать цикл в Ruby - PullRequest
1 голос
/ 11 января 2011

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

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

Кто-то знает лучший способ?

Ответы [ 4 ]

9 голосов
/ 11 января 2011

Множество альтернатив:

# 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 голосов
/ 11 января 2011

Вы хотите сделать что-то подобное?

(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, вероятно, самый идиоматичный способ сделать это в ruby, но Jonas Elfström опубликовал классную ссылку, которая быстро демонстрирует некоторые альтернативы:

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

0 голосов
/ 11 января 2011

Так как значение 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 - это отправленное сообщение, метод которого изменяет свое возвращаемое значение, то я не вижу никакого очевидного способа улучшить ваш код, кроме удаления лишних скобок.

0 голосов
/ 11 января 2011
10.times do |i|
    search = Google::Search::Web.new()
    search.query = "china"
    search.start = x
loop

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...