是否可以(甚至建议)在初始化期间将参数传递给类?甚至,在那之前 - 在实例化期间。
我希望能够做到这样的事情:
f:=Farm type: #chickens
然后在初始化期间,这样做就像......
myAnimalTracker := AnimalTracker new type
从AnimalTracker
方面来看,我想根据类型决定创建哪种类型的对象。在此示例中,AnimalTracker
将包含多个子类(Chickens
,Pigs
,Cows
等等 - 并且在实例化期间,我希望能够做出决定创建了哪种类型的对象。
在Farm
方面确定这一点似乎更有意义(例如,根据类型直接实例化我想要的类的类型)但是,它似乎没有出现方向措辞如此。
答案 0 :(得分:2)
是的,你可以这样做。
通常你会做类似
的事情Farm new initializeWithType: #chicken
但您也可以将其缩短为
Farm ofType: #chicken
最终将执行上一个操作(初始化方法必不可少)。
甚至可能还有一些像
这样的快捷方式Farm newWithChikens
但我建议你阅读Smalltalk With Style,这样你就会非常酷。
答案 1 :(得分:1)
smalltalk方式是在图像中查看它是如何完成的。
查看实现者(以及发件人)on:
你会注意到他们中的大部分是在班级定义的。 在Squeak& Pharo,默认是新方法(在课堂上) 在实例端调用initialize。