smalltalk - 如何创建在 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 很陌生,所以这可能是一个非常初学者的问题。
解决方案
让我首先指出您的代码中的一个错误,以便我们可以专注于您的问题。
鉴于您将消息发送new
到People
,我们可以假设您已经创建了该类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