ruby中的Enumerable的使用

昨天,跟朋友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 }
 end
end

kiwi = Kiwi.new([1,2,3])
kiwi.collect {|num| num * 2}  #=> [2, 4, 6]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值