在Ruby中实现循环的最智能,最有效的方法

时间:2011-01-11 18:03:29

标签: ruby

我想知道是否有任何优雅的方法来实现以下方法的循环。我只能提出一个常规while循环(Java程序员)作为以下伪代码:

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

有人知道更好的方法吗?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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可能是在ruby中执行此操作的最惯用方式,但JonasElfström发布了一个很酷的链接,可以快速演示一些替代方案:

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

答案 2 :(得分:0)

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

整数有times方法,它接受一个块并循环n次,其中n是数字。

答案 3 :(得分: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是一个消息发送,其方法会更改其返回值,那么除了删除多余的大括号之外,我没有看到任何改进代码的明显方法。