我已经获得了这个包括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 用于在块作为方法参数传递时调用方法内的块。那个区块内的收益率是多少呢?
答案 0 :(得分:2)
所包含的Enumerable
接口方法的正常运行要求该类实现产生连续值的each
方法。示例代码中的实现有效地将此逻辑委托给Array
的每个方法(因为@players
是一个数组)。
用yield
替换return
会导致提供 no 值,并绕过传入的任何代码块。
您可以尝试each
实施来验证这一点。