我想在所有Ruby的数据对象类中共享一个方法。也就是说以下类:
首先,我错过了哪些课程?
其次,如何在所有课程中同时分享my_method
?
class Hash
def my_method
"hi"
end
end
class String
def my_method
"hi"
end
end
class Number
def my_method
"hi"
end
end
class Array
def my_method
"hi"
end
end
答案 0 :(得分:4)
这是模块的用途:
module MyModule
def my_method
"hi"
end
end
class Hash
include MyModule
end
class String
include MyModule
end
...
你也可以通过一些元编程来缩短它:
[Hash, String, Number, Array].each do |klass|
klass.instance_eval do
include MyModule
end
end
在较新的ruby版本中(因为ruby 2.1.0),include
不再是私有方法,因此您可以将上述内容简化为:
[Hash, String, Number, Array].each do |klass|
klass.include MyModule
end
实现此目的的另一种方法是将其包含在父类中,如Object:
class Object
def my_method
"hi"
end
end
{}.my_method
然而,这会将此方法添加到所有类中,并且随处可用,所以要小心。
关于你是否错过了任何课程 - 你错过了它的音调,这完全取决于你在这里想要实现的目标。