Ruby “可枚举”中的重新定义方法`

Ruby “可枚举”中的重新定义方法`,ruby,Ruby,例如,如果我在可枚举中重新定义一个方法 module Enumerable def map "hello" end end 我当时以为Array中的map将更改为我的版本。但是[1,2,3].map{x | x+x}仍然输出[2,4,8]。我查看了数组的手册,没有定义映射,只有映射。如何使用我的map方法制作Array?正在重新定义 数组是唯一的方法?正如mudasobwa指出的,可枚举映射被数组映射覆盖。重新定义Array#map是一种方法。另一种方法是创建一个新模块,并将其

例如,如果我在
可枚举
中重新定义一个方法

module Enumerable
  def map
    "hello"
  end
end
我当时以为
Array
中的
map
将更改为我的版本。但是
[1,2,3].map{x | x+x}
仍然输出
[2,4,8]
。我查看了
数组的手册
,没有定义
映射
,只有
映射。如何使用我的
map
方法制作
Array
?正在重新定义
数组是唯一的方法?

正如mudasobwa指出的,
可枚举映射
数组映射
覆盖。重新定义
Array#map
是一种方法。另一种方法是创建一个新模块,并将其预先添加到
Array

module MyEnumerable
  def map
    "hello"
  end
end
class Array
  prepend MyEnumerable
end

Array.instance\u方法(:map).owner#⇒ 数组
:@mudasobwa+1对于
#owner
方法,以前不知道,谢谢你可能想知道为什么会有一个方法
Array\map
。为什么不直接使用
[1,2,3].map…
使用
可枚举的#map
?它不仅仅是地图
;一些
包含可枚举方法的类具有与可枚举方法同名的方法。这主要有两个原因。首先,在某些情况下,可以通过将方法裁剪为特定类来使用更高效的算法。其次,类中的某些方法的行为与
Enumumable
中的同类方法不同。例如,它返回一个散列。我检查了鹤嘴锄簿,map不在Array(和collect)下。这是否意味着鹤嘴锄的书没有给出完整的参考?如果你写的是真的,那么它就不完整,或者只对旧版本的Ruby是真的。