对于循环...永远

the*_*ter 1 ruby optimization loops

我有一个for循环,我希望永远增加.

我的代码:

for a in (0...Float::INFINITY).step(2)
    puts a
end
Run Code Online (Sandbox Code Playgroud)

输出:

0.0
2.0
4.0
Etc. Always with "#{a}.0"
Run Code Online (Sandbox Code Playgroud)

有没有办法将无穷大表示为整数,以便输出.0在最后没有预先对循环内容进行任何操作?

附录

你能解释一下你的循环是如何工作的吗?我试图找到最有效的解决方案,因为这个循环将迭代无限,削减几毫秒将大大提高性能.

也...

我将接受最短时间运行到1000000的解决方案

根据benchmark@Sefan和while循环答案,采用相同的时间Fruity,while循环答案需要更短的时间,for循环答案在第二,但多个loop do答案需要更长的时间.

由于其原因超出了这个问题的范围,我创建了另一个问题,解决了为什么某些循环比其他循环更快的问题(/sf/ask/2316213511/循环 - 更快).

Ste*_*fan 10

您可以在Numeric#step不通过限制的情况下使用:

0.step(by: 2) { |i| puts i }
Run Code Online (Sandbox Code Playgroud)

输出:

0
2
4
6
...
Run Code Online (Sandbox Code Playgroud)

你也可以建立自己的Enumerator:

step2 = Enumerator.new do |y|
  a = 0
  loop do
    y << a
    a += 2
  end
end

step2.each { |i| puts i }
Run Code Online (Sandbox Code Playgroud)


shi*_*vam 5

你可以用while true它:

puts a = 0
puts a+=2 while true
Run Code Online (Sandbox Code Playgroud)

顺便说一句,

有没有办法将无穷大表示为整数

没有