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

How do I create a method that stores names in Pharo?

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

为了更好地解释,假设我在一个组中有三个人,然后我想有一个固定人数的组。例如,我需要在下面的代码中定义 "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 很陌生,所以这可能是一个非常初学者的问题。

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

鉴于您正在向 People 发送消息 new,我们可以假设您已经创建了 class People。但是,前两行有问题

| People |
People := People new.

应该这样写

| people |
people := People new.

| group |
group := People new.

否则,您会将 People 的实例分配给 class People 本身,这将导致无法通过名称访问 class。当然,Smalltalk 编译器会阻止您使用大写临时名称,更不用说与 class 名称冲突的名称了。不过,您应该很清楚,您不想更改标识符 People 和它所代表的 class 之间的绑定。

如果您的 class People 实现了方法 addPerson:.

,接下来的级联看起来部分没问题

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

 self assert: people size = 3,

这只需要您在 People 中实现 size 方法,以便它用它持有的 "persons" 的数量来回答。

其他可疑的消息有Person john等,你应该在Person中添加一个class辅助方法newNamed:并写成:

Person newNamed: 'John'

哪里

newNamed: aString
  ^self new name: aString