如何创建在 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
我正在尝试创建一个存储名称的方法,然后(可能在另一种方法中)将它们附加到彼此以形成一个数组。我感兴趣的是数组的大小。
为了更好地解释,假设我在一个组中有三个人,然后我想有一个固定人数的组。例如,我需要在下面的代码中定义 "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