Smalltalk 尝试从OrderedCollection检索元素

Smalltalk 尝试从OrderedCollection检索元素,smalltalk,pharo,squeak,gnu-smalltalk,Smalltalk,Pharo,Squeak,Gnu Smalltalk,我正在使用pharo。我有一个Car类,它有一个speed变量,还有一个class-side方法withSpeed:aSpeed它设置speed:=aSpeed. 我正在操场上做下面的测试 car := Car withSpeed: 20. cars := OrderedCollection new. cars add: car. 现在,我有一辆car车内cars收藏 我想买一辆速度为20的车,我正在尝试以下代码,但它给了我错误: result := cars select: [ :each

我正在使用
pharo
。我有一个
Car
类,它有一个
speed
变量,还有一个class-side方法
withSpeed:aSpeed
它设置
speed:=aSpeed.

我正在操场上做下面的测试

car := Car withSpeed: 20.
cars := OrderedCollection new.
cars add: car.
现在,我有一辆
car
车内
cars
收藏

我想买一辆速度为20的车,我正在尝试以下代码,但它给了我错误:

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

你知道出了什么问题吗?

鉴于你的
汽车
有一个速度存取器,你只需

result := cars select: [ :each | each speed = 20. ].  
这将使您获得所有速度
20
的车辆。如果只需要一个,则应使用
detect:

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

实例变量的访问器(此处为
speed
)通常如下所示

Car>>speed
    ^ speed


您的错误可能是由于在类端定义了
#with speed
,但您正在将其发送到实例。这是新用户的一个常见陷阱,在(第5.3节)中得到了很好的澄清


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

可能使用
#detect:ifNone:
来捕获集合中没有此类元素的情况。是的,这样更好。谢谢你,麦克斯
Car>>speed: anObject
    speed := anObject.