2015-05-19 47 views
2

我正在使用pharo。我有一个Car类具有speed变量和类端的方法withSpeed: aSpeed这台speed := aSpeed.试图从OrderedCollection中检索元素

我想在操场下面的测试。

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

现在,我有一个carcars集合。

我想其中有speed = 20我想下面的代码的车,但它给我的错误:

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

任何想法是怎么回事?

回答

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. 
+2

可能使用'#detect:ifNone:'来捕获集合中没有这样的元素的情况。 –

+0

是的,那更好。谢谢Max – Tobias

4

你的错误可能是由于#withSpeed是在课堂上定义的事实,但哟你正在将它发送给实例。这是新用户常见的陷阱,并在Pharo By Example(5.3节)中做了很好的说明。

虽然这可能不是问题,因为您对错误的描述过于模糊。展望未来,复制调试器窗口标题和调用链的任何相关部分,您将得到更好的答案!