ruby methods that either yield or return Enumerator

后端 未结 4 653
死守一世寂寞
死守一世寂寞 2021-01-31 03:47

in recent versions of Ruby, many methods in Enumerable return an Enumerator when they are called without a block:

[1,2,3,4].map 
#=>         


        
4条回答
  •  长发绾君心
    2021-01-31 04:10

    The core libraries insert a guard return to_enum(:name_of_this_method, arg1, arg2, ..., argn) unless block_given?. In your case:

    class Array
      def double
        return to_enum(:double) unless block_given?
        each { |x| yield 2*x }
      end
    end
    
    >> [1, 2, 3].double { |x| puts(x) }
    2
    4
    6 
    >> ys = [1, 2, 3].double.select { |x| x > 3 } 
    #=> [4, 6]
    

提交回复
热议问题