如果我有一類動物,並且動物通過動物類型,那是動物的類型。動物可以使用這些信息實例化一個孩子嗎?如果類實例化對象不關心它正在創建的對象的類型,這不是一件好事嗎?它刪除了決定要實例化哪個子類所需的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