1

作业问题

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

我希望能够做类似的事情:

f:=Farm type: #chickens

然后在初始化期间让这个做一些沿着......

myAnimalTracker := AnimalTracker new type

AnimalTracker事情的角度来看,我想根据类型来决定创建哪种类型的对象。在此示例中,AnimalTracker将有几个子类(ChickensPigsCows等) - 在实例化期间,我希望能够决定创建哪种类型的对象。


只是在事情的一边决定这一点似乎更有意义Farm(即,只是根据类型直接实例化我想要的类的类型)但是,唉,方向似乎并没有这样措辞。

4

2 回答 2

2

是的,你可以这么做。

通常你会做类似的事情

Farm new initializeWithType: #chicken

但您也可以将其缩短为

Farm ofType: #chicken

这最终会做前面的事情(必须有初始化方法)。

也许甚至更多的捷径,比如

Farm newWithChikens

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

于 2013-06-14T03:30:45.937 回答
1

smalltalk 的方式是看一下图片是怎么做的。看看实现者(然后是发送者)

on:

您会注意到它们中的大多数是在类端定义的。在 Squeak & Pharo 中,默认情况下,新方法(在类端)在实例端调用初始化。

于 2013-06-14T09:11:28.660 回答