试图从OrderedCollection中检索元素

时间:2015-05-19 08:20:31

标签: smalltalk pharo squeak gnu-smalltalk

我正在使用pharo。我有一个Car类,其中有一个speed变量,另一个方法withSpeed: aSpeed设置了speed := aSpeed.

我正在操场上尝试以下测试。

car := Car withSpeed: 20.
cars := OrderedCollection new.
cars add: car.

现在,car内有cars个集合。

我想要获得speed = 20的汽车我正在尝试以下代码,但它给了我错误:

result := cars select: [ :each | each withSpeed: 20. ].  

知道出了什么问题吗?

2 个答案:

答案 0 :(得分:4)

鉴于您的Carspeed的访问者,您只需

result := cars select: [ :each | each speed = 20. ].  

这可以让你拥有速度为20的所有汽车。如果您只需要一个,则应使用detect:

myCar := cars detect: [ :each | each speed = 20. ].  

实例变量的访问者(此处speed)通常看起来像

Car>>speed
    ^ speed

Car>>speed: anObject
    speed := anObject.

答案 1 :(得分:4)

您的错误可能是由于#withSpeed在类端定义,但您将其发送到实例。这是新用户的常见陷阱,并在Pharo By Example中得到了很好的阐述(第5.3节)。

虽然这可能不是问题,因为您对错误的描述太模糊了。继续,复制调试器窗口标题和调用链的任何相关部分,你会得到更好的答案!