即使给出了块,Reduce方法也无法要求产生块

时间:2017-12-17 04:46:08

标签: ruby enumerable

我有一个课程,我已将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模块。

1 个答案:

答案 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