- 108 名前:デフォルトの名無しさん mailto:sage [04/01/21 11:16]
- >>105
#become: を使っているだけに #become: の挙動みたいな説明ですね(笑)。 完璧に化ければそれはもはや本人と見なしてよいか…という問題をはらんでいます。 私は、もともと self に束縛されていたオブジェクト(ここで「被害者」、 今は newSelf に束縛されている)のアイデンティティを擁護する 立場(^_^;)なので、被害者のクラスについてはこの処理を経たあとも それまでとなんら変わらない事実を踏まえて、Smalltalk のインスタンスに そのクラスを鞍替えすることは特殊な状況を例外として「できない」 と答えるのは正解かな、と。 特殊な状況とは、そのクラス(仮に Hoge )のインスタンスがひとつしかなく、 そのインスタンスが鞍替えする先のクラス(同じく Hage )のインスタンスが なく、さらに Hoge 、Hage がサブクラスを持たない場合です。このように 状況を限定すれば、 Hoge become: Hage を使って注目するインスタンスの 「クラスは変わった」と判断してもよいように思います。 | hoge hogeClass hogeO | hoge _ Hoge new. hogeClass _ hoge class printString. hoge o: $o. hogeO _ hoge o. Hoge become: Hage. ^ {hogeClass. hogeO. hoge class printString. hoge a} => #('Hoge' $o 'Hage' $o) このようにインスタンスとそのクラスとの委譲関係は自由にはできませんが、 クラスをしてそのスーパークラスとの委譲関係は比較的自由に乗り換えられる ことは話の流れ的には強調してもよいのかな…、とも。
|

|