Smalltalk 如何创建在Pharo中存储名称的方法?

Smalltalk 如何创建在Pharo中存储名称的方法?,smalltalk,pharo,Smalltalk,Pharo,我正在尝试创建一个方法,该方法存储的名称,然后(可能在另一个方法中)将它们相互附加以生成一个数组。我感兴趣的是数组的大小 为了更好地解释,假设我有三个人在一个小组里,然后我想要一个有固定人数的小组。例如,我需要在下面的代码中定义“addPerson”和“people group”: | People | People := People new. People addPerson: Person John; addPerson: Person Adam; addPers

我正在尝试创建一个方法,该方法存储的名称,然后(可能在另一个方法中)将它们相互附加以生成一个数组。我感兴趣的是数组的大小

为了更好地解释,假设我有三个人在一个小组里,然后我想要一个有固定人数的小组。例如,我需要在下面的代码中定义“addPerson”和“people group”:

| People |
People := People new.
People 
    addPerson: Person John;
    addPerson: Person Adam;
    addPerson: Person Josh.
self assert: People peopleGroup size = 3

我对Smalltalk和Pharo非常陌生,所以这可能是一个非常初级的问题。

首先让我指出您代码中的一个错误,这样我们就可以专注于您的问题

假设您正在将消息
new
发送给
People
,我们可以假设您已经创建了类
People
。然而,在前两行中存在一个问题

| People |
People := People new.
应该是这样写的

| people |
people := People new.

否则,您将为类
People
本身分配一个
People
实例,这将导致无法通过名称访问该类。当然,Smalltalk编译器可以防止出现大写临时字符,更不用说与类名冲突的字符了。不过,您应该清楚,您不想更改标识符
人员
与其所代表的类之间的绑定

如果您的类
People
实现了方法
addPerson:
,那么接下来的级联看起来部分正常

最后一个表达式可以简化为

 self assert: people size = 3,
这将只需要您在
人员
中实现
大小
方法,以便它以其持有的“人员”数量进行回答

其他可疑消息有
Person john
等。您应该在
Person
中添加类端方法
newNamed:
,并改为编写:

Person newNamed: 'John'
在哪里


谢谢,我已经为这门课定好了第一行。人是一个类,像亚当、约翰这样的名字都是对象。关键是让数组或集合中的人的名字以后可以引用,或者有他们的数量(使用size peopleGroup)。为了存储这些人,向
类添加一个实例变量,比如说,
内容
;将其初始化为一个新的
OrderedCollection
,并将
addPerson:aPerson
实现为
contents add:aPerson
。最后,将
size
实现为
^contents size
。您能再解释一下吗?正如我所说,我是个初学者。当然。告诉我你在哪里迷路了。你说“不行”是什么意思?将您的代码附加到问题中(不删除原始代码),告诉我们您收到的错误消息,我们将知道如何帮助您。
Person newNamed: 'John'
newNamed: aString
  ^self new name: aString