我有很多带有很多对象的类,我想对这些对象(不同的不相关类)应用一个方法
示例:
pig = animal.new
pig.name = "lulu"
human = person.new
human.firstname = "John" #There isn't method called "name".
def seeName
puts self.name if (self.name?)
puts self.firstname if (self.firstname?)
end
pig.seeName
human.seeName
这只是一个例子...... 我认为这是不可能的,但我正在寻找一种方法来做到这一点,而无需修改任何现有的类。
谢谢。
答案 0 :(得分:5)
您可以在module
中定义方法,然后在运行时将其包含在所需的类中
pig = Animal.new
pig.name = "lulu"
human = Person.new
human.firstname = "John"
module SeeName
def see_name
puts self.name if (self.name?)
puts self.firstname if (self.firstname?)
end
end
Person.class_eval { include SeeName }
Animal.class_eval { include SeeName }
pig.see_name # => "lulu"
human.see_name # => "John"
(当然,前提是人员和动物支持name
,name?
,firstname
和firstname?
)
答案 1 :(得分:2)
你应该可以这样做:
def see_name(object)
return object.name if object.respond_to? :name
object.firstname if object.respond_to :firstname
end
see_name(pig) #=> "lulu"
see_name(human) #=> "John"
然而,这不是在OOP中做事的正确方法。每次遇到这样的问题,都意味着你的对象设计走错了,需要重新审视。
答案 2 :(得分:-1)
一位同事告诉我,还有另外一种方式:
class Object
def seeName
puts self.name if (self.name?)
puts self.firstname if (self.firstname?)
end
end
pig.seeName
human.seeName
到目前为止它的效果非常好。