on mouseUp set the name of the target to 'clicked' end mouseUpというメッセージハンドラを持たせたとき、カードボタンやカードをクリックしたときの挙動を次のように素直に表現できます。
globals _AddSlots: (| stack. bkgnd. card. crdBtn |) stack: (| name <- '' |) bkgnd: (| p* = stack. name <- ''. mouseUp = (name: 'clicked') |) card: (| p* = bkgnd. name <- '' |) crdBtn: (| p* = card. name <- '' |) crdBtn mouseUp --> crdBtn の name が 'clicked' に。 card mouseUp --> card の name が 'clicked' に。もちろん、これでは継承関係を表現しただけなので、さらに、各オブジェクトのクラスである、スタックやバックグラウンド、カード、ボタンのプロトタイプを定義し、各オブジェクトの親スロット(* 付きスロット)に束縛してやらなければなりませんが、Self でなら逆に、それで終わりです。クラスベースの OOPL ではこうしたこと(GUI ウィジェットクラスのインスタンスを使って HyperCard のオブジェクト間の継承をシミュレートすること)は難しいか、難しくなくとも、トリッキーなことをしないといかんかなと思います。ということで HyperCard(の継承)は Self で比較的シンプルに表現できるから、プロトタイプベース(の委譲)に近いかも…と申し上げたわけです。--sumim
このページを編集 (6519 bytes)
以下の 10 ページから参照されています。 |
This page has been visited 9552 times.