在实例创建期间传递参数 - smalltalk

时间:2013-06-14 03:11:48

标签: smalltalk

家庭作业问题

是否可以(甚至建议)在初始化期间将参数传递给类?甚至,在那之前 - 在实例化期间。

我希望能够做到这样的事情:

f:=Farm type: #chickens

然后在初始化期间,这样做就像......

myAnimalTracker := AnimalTracker new type

AnimalTracker方面来看,我想根据类型决定创建哪种类型的对象。在此示例中,AnimalTracker将包含多个子类(ChickensPigsCows等等 - 并且在实例化期间,我希望能够做出决定创建了哪种类型的对象。


Farm方面确定这一点似乎更有意义(例如,根据类型直接实例化我想要的类的类型)但是,它似乎没有出现方向措辞如此。

2 个答案:

答案 0 :(得分:2)

是的,你可以这样做。

通常你会做类似

的事情
Farm new initializeWithType: #chicken

但您也可以将其缩短为

Farm ofType: #chicken

最终将执行上一个操作(初始化方法必不可少)。

甚至可能还有一些像

这样的快捷方式
Farm newWithChikens

但我建议你阅读Smalltalk With Style,这样你就会非常酷。

答案 1 :(得分:1)

smalltalk方式是在图像中查看它是如何完成的。

查看实现者(以及发件人)
on:

你会注意到他们中的大部分是在班级定义的。 在Squeak& Pharo,默认是新方法(在课堂上) 在实例端调用initialize。