我有一个课程,我已将Enumerable
模块包含在内,如下所示:
class Paragraph
include Enumberable
attr_accessor :error_totals
def initialize(text, error_totals)
@original = text
@error_totals = error_totals
end
def each
error_totals.each {|category, total| yield category, total }
end
def totals
each.reduce(0) {|t,(category,total)| to += total }
end
end
我收到以下错误,我不明白为什么:
LocalJumpError:
no block given (yield)
然而,当我执行以下操作时,它可以工作:
def total_errors_per(number_of_words:)
result = 0.0
each {|category, total| result += total.to_f/original.word_count*number_of_words}
result
end
为什么减少导致这个问题?我在调用reduce之后传递了一个块。我真的想了解如何通过理解这个问题来正确使用Enumberable模块。
答案 0 :(得分:1)
在each
实施中,无论是否提供阻止,您都会致电yield
,并在each.reduce
致电each
收到无阻止
如果没有给出阻止,则应该返回一个枚举器:
def each
return enum_for(:each) unless block_given?
error_totals.each {|category, total| yield category, total }
end