ruby中的Enumerable的使用

来源:互联网 发布:java如何得到.xlsx文件 编辑:程序博客网 时间:2024/06/06 05:47

昨天,跟朋友review code,发现了一个hash_obj.collect写成了hash_obj.each.collect。就想对Hash有个简单的总结。

 

首先查看Hash的祖先。

Hash.ancestors #> [Hash, Enumerable, Object, Kernel, BasicObject]

 

找到Hash使用Mixin的方式include了Enumerable。Enumerable提供了一系列的方法,如each,collect,map,sort之类的。include了Enumerable的类只需要实现each就可以获得所有如collect, map, sort这样的方法。(当然sort比较特殊一点儿)。

 

当然Hash就直接有collect方法,而不需要调用hash_obj.each.collect。

 

实现一个例子:

class Kiwi include Enumerable def initialize(msg)  @msg =  msg end def each  @msg.each { |msg| yield msg } endendkiwi = Kiwi.new([1,2,3])kiwi.collect {|num| num * 2}  #=> [2, 4, 6]

 

Kiwi这个类就可以直接使用collect方法,因为它实现了each。

原创粉丝点击