vieweditattachhistoryswikistopchangessearchhelp

復習のページ2

こちらからの続き…
>だからその場(普通ワークスペース?)に評価をprint-itさせるために必須な最終行の「^」はいらない。
反応の結果になにを期待するか…と申し上げたのはそういう意味です。本来なら、たち も たちの数は? 同様に ^ を書くべきなのですが、当初は print-it での評価を想定しておらず、インスペクタの表示という派手な反応が返るので間違って print-it したとしてもプリント結果は無視していただけるだろう(平たく言えば、気が付くことはあるまい…(^_^;))との、また、そもそも printOn: をいじっていなかったので、print-it させただけで #(a ムーンレイス a ムーンレイス a ムーンレイス) などとプリントされても何のことだか分からない、という状況に陥ることが容易に予想され、print-it よりむしろインスペクタで見せた方がよいだろうという判断に基づき、インスペクタ表示とは直接関係のない ^ は書くべきではないという結論に至った自らの思考過程を思い出しました。振り返れば皮肉にも、^ をあえて書かなかったこと、Array で結果を見せたこと、インスペクタを使ったことで、ご理解を促すよう配慮したつもりが、すべてが後々の混乱に拍車をかけることにつながってしまっていたわけですね。ごめんなさい。--sumim - 2002-07-20, 12:44:48

ですから、ムーンレイスのインスタンスたちを手軽に一覧する目的を終えた「たち」のメソッド(仕様書)は今現在、もはや、

たち
"生存している人間たちを返す"
^ self allInstances


とするのが正しく、そもそも当初の“「ムーンレイス たち」の do-it でインスペクタを開く”という仕様自体が不適切なものだったと考えるのがよいと思います。くだんの説明を終えた時点で、そうしたことに言及すべきでした。ちなみに、インスペクタを開きたければ(そうした反応を期待するなら)、上の修正を施したあと「ムーンレイス たち」というメッセージ式を inspect-it するか、でなければ「ムーンレイス たち inspect」を do-it するほうが美しいですしずっと自然です。--sumim - 2002-07-20, 12:50:35

KYさんからも掲示板で助言をいただきつつ漸進しております。しばし停滞にお付き合い下さいm(_ _)m。
inspectの件はやっと明るくなりました。
>たち
>"生存している人間たちを返す"
>^ self allInstances
直して試してみました。大丈夫、これは理解できました。
>たとえば、先に出てきた、
>1. 2. 3. 4. 5
>の print-it の結果は 5 だけでしたよね。
この複数行一括print-itも大きな鍵のようです。<わたしにとって

先の「ミラン='処理終わり'」の件ですが、これはミランというグローバル変数に「ムーンレイス、瞳は灰、男、初期値で好意対象は'ディアナ・ソレル'」というメッセージを送り(次々に新しいオブジェクトが生まれ)、最後にミランにムーンレイスとは全く性格の異なるオブジェクト=文字列'処理終わり'を送ってしまった。だからムーンレイスはおろか人間ですらなくなった……と理解してよろしいでしょうか?

最終行を削除すると、print-itの評価はムーンレイス(class)となります。

メッセージ式の最後の「^」は、登場人物が上の2行で様々なメッセージを受け取った「登場人物」を最後にミランに送るための「^」で、これによって「ミラン」はやっと完成する。

……もの凄く基本的なところが理解できていなかったのですね(T-T)?
>刺激の反応としてどんなオブジェクトを返すかを決めるための最終処理
という意味がやっとわかったような気がします。
まだ不十分かも知れませんがm(_ _)m --さ茂 - 2002-07-20, 23:04:41


先の「ミラン='処理終わり'」の件ですが、これはミランというグローバル変数に「ムーンレイス、瞳は灰、男、初期値で好意対象は'ディアナ・ソレル'」という値を順々に送り(次々新しいオブジェクトが生まれ)、最後にそれに'処理終わり'という文字列を送ってしまった。それだけのことと理解してよろしいでしょうか?

たとえば「ミラン _ ムーンレイス の: 'ミラン・レックス' 瞳の色は: '灰色' で: '男'」を do-it したときに何が起こるかを順を追って箇条書きにしてみましょう。
の: ある名前 瞳の色は: ある色 で: 男か女
"基本的な状態を設定した「ある人間」を返す"
| 登場人物 |
登場人物 _ (self new の: ある名前 瞳の色は: ある色 で: 男か女).
self = ムーンレイス
ifTrue: [登場人物 が好きなのは: (self の: 'ディアナ・ソレル')]
ifFalse: [登場人物 が好きなのは: (self の: 'キエル・ハイム')].
^ 登場人物

人間 subclass: #'ムーンレイス'
 instanceVariableNames: ''
 classVariableNames: ''
 poolDictionaries: ''
 category: 'ターンA-ガンダム'

Object subclass: #'人間'
 instanceVariableNames: '名前 瞳の色 好意対象 憎悪対象 性別 '
 classVariableNames: ''
 poolDictionaries: ''
 category: 'ターンA-ガンダム'


“あるムーンレイス”(名札=なし)の内部状態
名前 …… nil
瞳の色 …… nil
好意対象 …… nil
憎悪対象 …… nil
性別 …… nil
の: ある名前 瞳の色は: ある色 で: 男か女
"主に初期状態のある人間に対し基本的な状態を設定する"
名前 _ ある名前.
瞳の色 _ ある色.
性別 _ 男か女

“あるムーンレイス”(名札=なし)の内部状態
名前 …… 'ミラン・レックス'
瞳の色 …… '灰色'
好意対象 …… nil
憎悪対象 …… nil
性別 …… '男'
“あるムーンレイス”(名札=登場人物)の内部状態
名前 …… 'ミラン・レックス'
瞳の色 …… '灰色'
好意対象 …… nil
憎悪対象 …… nil
性別 …… '男'
ifTrue: ブロックA ifFalse: ブロックB
 ^ブロックA value

の: ある名前
"ある名前のある人間を返す"
| 候補 |
候補 _ self allInstances select: [ :ある人間 | ある人間 の名前 = ある名前 ].
^ (候補 size > 0) ifTrue: [ 候補 first ] ifFalse: [ nil ]

が好きなのは: ある人間
好意対象 _ ある人間

“あるムーンレイス”(名札=登場人物)の内部状態
名前 …… 'ミラン・レックス'
瞳の色 …… '灰色'
好意対象 …… ムーンレイス の: 'ディアナ・ソレル'
憎悪対象 …… nil
性別 …… '男'
“あるムーンレイス”(名札=ミラン)の内部状態
名前 …… 'ミラン・レックス'
瞳の色 …… '灰色'
好意対象 …… ムーンレイス の: 'ディアナ・ソレル'
憎悪対象 …… nil
性別 …… '男'

こんな物語が「ミラン _ ムーンレイス の: 'ミラン・レックス' 瞳の色は: '灰色' で: '男'」の do-it で展開されています。--sumim - 2002-07-21, 01:04:03

おはようございます。
分解するとさらに混乱しますが、基本的にオブジェクトへのメッセージの送り方、反応の仕方の順が理解不十分でした。
この箇条書きを抜き出してじっくりと読み返して自分なりに消化できるかやってみます。しばしお待ちをm(_ _)m。
毎度のことですが、基本的な「メッセージの送り方・反応の返り方」の不理解が全てこの停滞の原因ですね……。まったくもって不出来な生徒ですみませんm(_ _)m。--さ茂 - 2002-07-21, 08:24:07

そうですね。ただ、そこさえきちんとイメージできるようになれば、まだ説明をしていない Array の挙動のところを除いて、前述の箇条書き、ひとつひとつに合点がいくようになると思います。経験から、これがすっぽりとはまったときはとても気持ちがよいものですので是非、がんばってください。逆に、分解して混乱が増すときは、やはりなにかの基本的理解が足りていないでしょう。この機会に、しっかりとかたづけておきたいですね。オブジェクトにメッセージを送り、その反応として返ってきたオブジェクトにまたメッセージを送るという連鎖的作業と、すぐにメッセージを送ることができないオブジェクトは反応として返ってきたときいったん変数につなぎとめておく。たったこれだけのことで、目の前で起きているかなりの部分を説明可能なシステムは希有で面白いと私は考えています。--sumim - 2002-07-21, 13:31:27


このページを編集 (14148 bytes)


Congratulations! 以下の 1 ページから参照されています。

This page has been visited 2862 times.