Ruby 有许多类型的枚举数,但是第一个也是最简单的枚举数类型是 each。我们将打印出介于1到10之间的每个数字的奇数或偶数,以显示每个数字的工作原理。
基本上有两种通过方式,即所谓的blocks。Ablock是正在传递的一段代码,将由所调用的方法执行。该each方法使用一个block,它调用它所调用的对象集合的每个元素。
有两种方法可以将块传递给方法:
(1..10).each { |i| puts i.even? ? 'even' : 'odd' }
是一个非常压缩和ruby的方法来解决这个问题。让我们逐一分解。
(1..10)范围是从1到10包括在内。如果我们希望它能够1以10独特的,我们会写(1...10)。
.each是一个枚举器,它枚举each作用于其上的对象中的元素。在这种情况下,它作用于each范围内的数字。
{ |i| puts i.even? ? 'even' : 'odd' }是该each语句的块,它本身可以进一步细分。
if expression a else b end
|i|这意味着范围内的每个元素在块中由标识符表示i。
puts是Ruby中的一种输出方法,每次打印后都会自动换行。(print如果我们不希望自动换行,可以使用)
i.even?检查是否i均匀。我们也可以用过i % 2 == 0; 但是,最好使用内置方法。
? "even" : "odd"这是红宝石的三元运算符。三元运算符的构造方法是expression ? a : b。这是短的
如果代码长度超过一行,block则应将其作为传递multiline block。
(1..10).each do |i| if i.even? puts 'even' else puts 'odd' end end
在中multiline block,do替换样式中end的左括号,并替换inline样式中的右括号。
Ruby也支持reverse_each。它将向后迭代数组。
@arr = [1,2,3,4] puts @arr.inspect # 输出为[1,2,3,4] print "Reversed array elements[" @arr.reverse_each do |val| print " #{val} " # output is 4 3 2 1 end print "]\n"