我想创建一个像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"]
答案 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]