Ruby Each

示例

Ruby 有许多类型的枚举数,但是第一个也是最简单的枚举数类型是 each。我们将打印出介于1到10之间的每个数字的奇数或偶数,以显示每个数字的工作原理。

基本上有两种通过方式,即所谓的blocks。Ablock是正在传递的一段代码,将由所调用的方法执行。该each方法使用一个block,它调用它所调用的对象集合的每个元素。

有两种方法可以将块传递给方法:

方法1:内联

(1..10).each { |i| puts i.even? ? 'even' : 'odd' }

是一个非常压缩和ruby的方法来解决这个问题。让我们逐一分解。

  1. (1..10)范围是从1到10包括在内。如果我们希望它能够1以10独特的,我们会写(1...10)。

  2. .each是一个枚举器,它枚举each作用于其上的对象中的元素。在这种情况下,它作用于each范围内的数字。

  3. { |i| puts i.even? ? 'even' : 'odd' }是该each语句的块,它本身可以进一步细分。

    if expression
      a
    else
      b
    end
    1. |i|这意味着范围内的每个元素在块中由标识符表示i。

    2. puts是Ruby中的一种输出方法,每次打印后都会自动换行。(print如果我们不希望自动换行,可以使用)

    3. i.even?检查是否i均匀。我们也可以用过i % 2 == 0; 但是,最好使用内置方法。

    4. ? "even" : "odd"这是红宝石的三元运算符。三元运算符的构造方法是expression ? a : b。这是短的

如果代码长度超过一行,block则应将其作为传递multiline block。

方法2:多行

(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"