Bee Smalltalk поддерживает поведение, характерное для экземпляра.Это означает, что любой экземпляр вашего класса легко сказать, как реагировать на любое сообщение.
В вашем случае, самый простой способ получить то, что вы хотите, - это оценить
b answerTo: #printString with: 'b'
* 1005.* Фактически, это установит специфичный для экземпляра метод в поведении
b
, представляющем метод
printString
^'b'
, но привязанный только к b
, а не к другим экземплярам MyClass
, который все еще будетиспользуйте метод #printOn:
, который вы определили.
Еще лучший подход не заключался бы в жестком коде 'b'
, а вместо этого ссылался бы на b name
.Для этого вы должны оценить:
b answerTo: #printString evaluating: [b name].
Это лучше, потому что если вы переименуете b
, так что его имя теперь 'b2'
, прежняя реализация #printString
будет продолжать отвечать 'b'
, в то время какпоследний ответит 'b2'
.Другими словами, это установит метод
printString
^b name
только в b
(и не затронет другие экземпляры).
Наконец, если вы хотите, чтобы это поведение было временным, а не постояннымВы должны оценить:
b answerTo: #printString evaluationg: [b name] while: aBlock
, где aBlock
обозначает блок кода, который вы хотите выполнить и в течение которого вашему экземпляру необходимо привязать указанное специфическое поведение к #printString
.