[SML 7170] Re: "0 @ 0" について

AOKI Atsushi aoki @ sra.co.jp
2006年 9月 23日 (土) 02:37:41 JST


青木です。

> 数年前に投稿したきりでROMのみでしたが、一度は挫折した
> Smalltalkを青木さん「Smalltalkイディオム」で再挑戦しています。

拙著「Smalltalk イディオム」は上級者向けに書き下ろしましたの
で、これから取り組もうという方々には難しいように思います。

> しかし、いきなり躓いてしまいました。
> 「2.基本->do it」の最初のプログラムの"0 @ 0"でメッセージの
> 遣り取りを調べていくと、"self basicNew"が出てきたところで追い
> かけられなくなりました。

なるほど。ミイラ取りがミイラになる感じですよね。ここを切り抜
けないと、どうしようもないのですが、後回しにして進むのも良策
ですよ。

どうしても追いかけられないのがイヤ(気にくわない)というので
あれば、メタクラス系列へ歩を進める必要があります、次のPDF
の2ページ目から5ページ目が参考になりますので、どうぞご覧に
なってください。特に3ページ目が重要です。

http://www.sra.co.jp/people/aoki/SmalltalkLecture/SmalltalkLecture06.pdf

『new』や『basicNew』はインスタンスに送るメッセージではなく、
クラスに送るメッセージですから、メソッドサーチの系列はメタク
ラス階層をたどるのです。クラス階層ではありません。寺内さんは
道を間違えて遭難している状態です。

[aPoint]〜>【Point】→ 【ArithmeticValue】→ 【Magnitude】
→ 【Object】→【nil】という「クラス階層」をたどっていて、

[Point]〜>【Point class】→ 【ArithmeticValue class】→
【Magnitude class】→ 【Object class】→ 【Cass】→
【ClassDescription】→【Behavior】→ 【Object】→【nil】とい
うメタクラス階層をたどっていないのです。

もっとも大切なことは、[インスタンス]〜>【クラス】のところ
でして、(100 @ 200) がレシーバであれば[aPoint]〜>【Point】
であり、Point がレシーバであれば[Point]〜>【Point class】
になります。

Smalltalk では、クラスといえども、インスタンスなので、メタ
クラスの「唯一のインスタンス(シングルトン)」なんです。

> "Core."が付加されている意味がわかりません。

名前空間(NameSpace)です。クラス名に幾つも前置できます。たと
えば、今、寺内さんが用いているブラウザ(プログラミング)の環
境は「Refactory.Browser.BrowserEnvironment」というようにです。

名前にスコープを与えて、衝突(自分がつけた名前と他人がつけた
名前が同じになること)を避ける目的で VisualWorks 5i.x から導
入されました。

------------------------------------------------------------
R2D2 (AOKI Atsushi)        http://www.sra.co.jp/people/aoki/





SML メーリングリストの案内