首页 > 解决方案 > 如何创建在 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 很陌生,所以这可能是一个非常初学者的问题。

标签: smalltalkpharo

解决方案


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

鉴于您将消息发送newPeople,我们可以假设您已经创建了该类People。但是,前两行有一个问题

| People |
People := People new.

应该写成

| people |
people := People new.

或者

| group |
group := People new.

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

People如果您的类实现了 method ,那么接下来的级联看起来部分没问题addPerson:

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

 self assert: people size = 3,

这只需要您实现该size方法,People以便它回答它所拥有的“人”的数量。

其他可疑消息是Person john等。您应该在其中添加一个类端方法newNamed:Person改为:

Person newNamed: 'John'

在哪里

newNamed: aString
  ^self new name: aString

推荐阅读