Object subclass: Animal [
| name |
Animal class >> new: name [^super new value: name; yourself]
value: n [name := n]
play [^name]
].
Animal subclass: Dog [
play [^'わんわん!', name, 'だよ']
].
Animal subclass: Cat [
| sleep |
Cat class >> new: name new: sleep [^super new value: name; valueFlag: sleep; yourself]
valueFlag: f [sleep := f]
play [
sleep = 1
ifTrue: [^'にゃあ!', name, 'だよ', '...でも寝る']
ifFalse: [^'にゃあ!', name, 'だよ']
]
].
pets := Array new: 2.
pets at: 1 put: (Dog new: 'ぽち').
pets at: 2 put: (Cat new: 'たま' new: 1).
pets do: [:pet | pet play printNl].
T2JqZWN0IHN1YmNsYXNzOiBBbmltYWwgWwogICAgfCBuYW1lIHwKICAgIEFuaW1hbCBjbGFzcyA+PiBuZXc6IG5hbWUgW15zdXBlciBuZXcgdmFsdWU6IG5hbWU7IHlvdXJzZWxmXQogICAgdmFsdWU6IG4gW25hbWUgOj0gbl0KICAgIHBsYXkgW15uYW1lXQpdLgoKQW5pbWFsIHN1YmNsYXNzOiBEb2cgWwogICAgcGxheSBbXifjgo/jgpPjgo/jgpPvvIEnLCBuYW1lLCAn44Gg44KIJ10KXS4KCkFuaW1hbCBzdWJjbGFzczogQ2F0IFsKICAgIHwgc2xlZXAgfAogICAgQ2F0IGNsYXNzID4+IG5ldzogbmFtZSBuZXc6IHNsZWVwIFtec3VwZXIgbmV3IHZhbHVlOiBuYW1lOyB2YWx1ZUZsYWc6IHNsZWVwOyB5b3Vyc2VsZl0KICAgIHZhbHVlRmxhZzogZiBbc2xlZXAgOj0gZl0KICAgIHBsYXkgWwogICAgICAgICAgc2xlZXAgPSAxCiAgICAgICAgICBpZlRydWU6ICBbXifjgavjgoPjgYLvvIEnLCBuYW1lLCAn44Gg44KIJywgJy4uLuOBp+OCguWvneOCiyddCiAgICAgICAgICBpZkZhbHNlOiBbXifjgavjgoPjgYLvvIEnLCBuYW1lLCAn44Gg44KIJ10KICAgIF0KXS4KCnBldHMgOj0gQXJyYXkgbmV3OiAyLgpwZXRzIGF0OiAxIHB1dDogKERvZyBuZXc6ICfjgb3jgaEnKS4KcGV0cyBhdDogMiBwdXQ6IChDYXQgbmV3OiAn44Gf44G+JyBuZXc6IDEpLgpwZXRzIGRvOiBbOnBldCB8IHBldCBwbGF5IHByaW50TmxdLgo=