我想知道是否有任何优雅的方法来实现以下方法的循环。我只能提出一个常规while循环(Java程序员)作为以下伪代码:
while x<10
search = Google::Search::Web.new()
search.query = "china"
search.start = x
end
有人知道更好的方法吗?
答案 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
是一个消息发送,其方法会更改其返回值,那么除了删除多余的大括号之外,我没有看到任何改进代码的明显方法。