将块传递给方法时没有方法错误

时间:2016-05-14 01:38:07

标签: ruby

尝试将块传递给sum方法时:

def sum(list, &block)
  list.find_all{yield}.reduce(0, :+)
end
sum([12, 14, 0, 7, 56, 0]) {|i| i % 2 == 0}

我收到此错误:

  

NoMethodError:nil的未定义方法`%':NilClass

我的方法无法将i识别为列表中的元素。我不知道如何解决它。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

list.find_all { |i| yield i }.reduce(0, :+)

或等效

list.find_all(&block).reduce(0, :+)

您最初编写的内容通过列表进行搜索,以便对于每个元素yield - 这将调用没有参数的块,i被分配nil和{{1}很糟糕。