Пытается извлечь элемент из коллекции OrderedCollection

Я использую 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 ответа

Решение

Учитывая, что ваш 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 определяется на стороне класса, но вы отправляете его экземплярам. Это обычная ловушка для новых пользователей, которая хорошо разъясняется в Pharo By Example (раздел 5.3).

Хотя это может и не быть проблемой, потому что ваше описание ошибки слишком расплывчато. В дальнейшем скопируйте заголовок окна отладчика и любую соответствующую часть цепочки вызовов, и вы получите лучшие ответы!

Другие вопросы по тегам