Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 创建自己的数组#映射式方法_Ruby - Fatal编程技术网

Ruby 创建自己的数组#映射式方法

Ruby 创建自己的数组#映射式方法,ruby,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"] 创建具有不同方法相同行为的方法的最简单方法是: 如果出于任何奇怪的原因,您不

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

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

如果出于任何奇怪的原因,您不想使用,您可以使用:

类数组
def新映射方法
返回(uuu被调用方uuu)的枚举u,除非给出块u?
注入([]){| acc,el | acc
谢谢大家!我也为我的qeestion做了一个解决方案

输出=>[“1”、“2”、“3”]

输出=>[1,2,3,4,5]


尝试使用
each
push
。啊@sagarpandya2我想拥有与数组MAPI相同输出的方法这里有问题吗?你是否尝试过自己解决这个问题?到目前为止你得到了什么?顺便问一下,这是家庭作业吗?@Stefan我只使用别名,所以需要另一种方法可能
each\u和\oobject
更合适。您能解释一下“为(被调用方)返回枚举”吗这就是为什么你要接受callee,这是什么意思?@uishra:文档有什么不清楚的地方吗?文档到底有什么不清楚的地方?我得到了答案@Stefan callee的目的是返回实际调用该方法的符号。@JörgWMittag谢谢!我检查文档,然后正确理解上面的文字。关于什么
[1,2,3]。我的_映射图
?请参见。@CarySwoveland感谢您的指点,我正在重构我的代码。
class Array
  alias_method :new_map_method, :map
end
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)
[1, 2, 3, 4, 5].my_map do |x|
  x
end