试图从 OrderedCollection 中检索元素

trying to retrieve element from an OrderedCollection

我正在使用 pharo。我有一个 Car class 有一个 speed 变量和 class 副方法 withSpeed: aSpeed 设置 speed := aSpeed.

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

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

现在,我在 cars 集合中有一个 car

我想买有 speed = 20 的车 我正在尝试以下代码,但它给我错误:

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

知道出了什么问题吗?

鉴于您的 Car 具有 speed 的访问器,您可以简单地做到

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.

您的错误可能是由于 #withSpeed 是在 class-side 上定义的,但您将其发送到实例。这是新用户的常见陷阱,在 Pharo By Example(第 5.3 节)中有很好的说明。

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