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是真的。