如果我有一类动物,并且动物通过动物类型,那是动物的类型。动物可以使用这些信息实例化一个孩子吗?如果类实例化对象不关心它正在创建的对象的类型,这不是一件好事吗?它删除了决定要实例化哪个子类所需的case语句。家长可以选择实例化哪个孩子吗?
例如:
@animal = Animal.new(cat) which instantiates a Cat < Animal object.
如果我有一类动物,并且动物通过动物类型,那是动物的类型。动物可以使用这些信息实例化一个孩子吗?如果类实例化对象不关心它正在创建的对象的类型,这不是一件好事吗?它删除了决定要实例化哪个子类所需的case语句。家长可以选择实例化哪个孩子吗?
例如:
@animal = Animal.new(cat) which instantiates a Cat < Animal object.
我不知道你的问题是什么,但如果你想创建一个变量的类的实例,你可以直接调用Class#new
方法:
@animal = cat.new
如果你只希望这种情况发生如果类实例cat
是Animal
一个子类,然后做
@animal = cat.new if cat.superclass == Animal
这令我宁可在像Ruby语言反常。如果'animal_type'实际上是一种动物类型,那么您应该实例化'animal_type' - 只需要'animal_type.new'而不是'Animal.new(animal_type)'。不需要案例说明或花式牦牛剃须。消息分派已经完成了确定接收方类的工作,并为你调用适当的方法。 – Chuck 2011-04-01 18:17:54
@Chuck:如果'animal_type'来自yaml,那么在yaml文件中使用':cat'要比'Cat'类的yaml容易得多。 – 2011-04-03 23:56:43