创建自己的array# map类方法



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

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"]

创建具有不同方法相同行为的方法的最简单方法是一个简单的别名:

class Array
  alias_method :new_map_method, :map
end

如果,不管什么奇怪的原因,你不想使用map,你可以用inject代替:

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

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

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 => ["1", "2", "3"]

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

output => [1,2,3,4,5]

最新更新