我正在写一个Ruby循环,如下所示:
iterations = 10
until iterations == 0
unless iterations == 1
puts "#{iterations} iterations until done"
else
puts "#{iterations} iteration until done"
end
iterations -= 1
end
puts "Done"
我想知道是否有一种更"Ruby的方式"来优化/编写这些代码。有人有什么想法吗?
10.downto(1) do |iteration|
puts "#{iteration} iteration#{'s' if iteration > 1} until done"
end
puts 'Done'
require 'active_support/inflector'
10.downto(1).each { |i| puts "#{i} #{'iteration'.pluralize(i)} until done" }
puts 'Done'
计数向上使用范围对象
如果不需要倒计数,可以通过迭代Range对象来进一步简化。例如:
(1..10).each { |i| puts "#{i} iterations completed" }
这将打印:
1 iterations completed
2 iterations completed
3 iterations completed
4 iterations completed
5 iterations completed
6 iterations completed
7 iterations completed
8 iterations completed
9 iterations completed
10 iterations completed
反转范围
如果您已经有一个Range对象,并且希望在不必调用Integer#downto的情况下倒计时,也可以反转Range。例如:
(1..10).to_a.reverse.each { |i| puts i }