像方法一样创建自己的Array #map

时间:2016-09-21 06:47:58

标签: ruby

我想创建一个像Array#my_map这样的实例方法,该方法应该是原始Array#map方法的行为。 我想从新方法输出相同的输出如下:

arr = [1, 2, 3, 4]
arr.new_map_method do |x|
 x + 1
end # => [2, 3, 4, 5]

arr.new_map_method(&:to_s) # => ["1", "2", "3", "4"]

2 个答案:

答案 0 :(得分:1)

使用不同方法的相同行为创建方法的最简单方法是简单alias

class Array
  def new_map_method
    return enum_for(__callee__) unless block_given?
    inject([]) {|acc, el| acc << yield(el) }
  end
end

如果出于某种奇怪的原因,您不想使用map,则可以使用inject代替:

__init__()

答案 1 :(得分:1)

  

谢谢你们!我也为我的qeestion做了一个解决方案

class Array
 def my_map(&block)
  result = []
  each do |element|
   result << block.call(element)
  end
  result
 end
end
  

函数调用

 [1,2,3].my_map(&:to_s)
  

output =&gt; [“1”,“2”,“3”]

[1, 2, 3, 4, 5].my_map do |x|
  x
end
  

output =&gt; [1,2,3,4,5]