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