zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    Counting Stars hdu
    Color it hdu
    steins;Gate
    原根
    3-idiots
    Tree
    洛谷P1352 没有上司的舞会
    洛谷P1131 时态同步
    洛谷P3177 树上染色
    Codeforces Round #617 (Div. 3)
  • 原文地址:https://www.cnblogs.com/java20130722/p/3206856.html
Copyright © 2011-2022 走看看