在一个街区内屈服

时间:2016-05-03 11:28:02

标签: ruby

我已经获得了这个包括Enumerable模块的课程:

class Team 
  include Enumerable # LOTS of functionality

  attr_accessor :name, :players 
  def initialize (name) 
    @name = name 
    @players = [] 
  end 
  def add_players (*players) # splat 
    @players += players
  end 
  def to_s 
    "#{@name} team: #{@players.join(", ")}" 
  end 
  def each 
    @players.each { |player| yield player }
  end 
end 

我知道 yield 用于在块作为方法参数传递时调用方法内的块。那个区块内的收益率是多少呢?

1 个答案:

答案 0 :(得分:2)

所包含的Enumerable接口方法的正常运行要求该类实现产生连续值的each方法。示例代码中的实现有效地将此逻辑委托给Array的每个方法(因为@players是一个数组)。

yield替换return会导致提供 no 值,并绕过传入的任何代码块。

您可以尝试each实施来验证这一点。