[SML 7169] "0 @ 0" について

NOBUTAKA Terauchi europa @ ps.inforyoma.or.jp
2006年 9月 23日 (土) 01:13:48 JST


初めまして。寺内と申します。

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

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

私の調べ方が間違っている可能性がありますので、追いかけた順番、
考え方を下記に記します。
使用しているSmalltalkは、"VisualWorks NonCommercial, 7.4.1"です。

--------------------------------------------------------------------
0 @ 0
--------------------------------------------------------------------
0 is a SmallInteger
0はSmallInteterのインスタンスと考えています。
次に示す二項メッセージ式"@ 0"がインスタンスメソッドだからです。
--------------------------------------------------------------------
@ y
 "Answer a new Point whose x value is the receiver and whose y value
 is the argument."

 <primitive: 18>
 ^Point x: self y: y

このメッセージは、Numberに定義されているインスタンスメソッドでした。
Number -> Integer -> SmallIntegerの流れで継承しているとわかりました。
ただ、superclassの定義で "Core."が付加されている意味がわかりません。
--------------------------------------------------------------------
x: xInteger y: yInteger
 "Answer a new instance of a Point with coordinates xInteger and yInteger."

 ^self basicNew setX: xInteger setY: yInteger

basicNewというメッセージはPointのsuperclassで定義されていると
考えて調べると、

AbsentClassImporter class basicNew
Behavior basicNew
BehaviorShell basicNew
Character class basicNew
LimitedPrecisionReal class basicNew
SmallInterger class basicNew

で定義されていました。
最初は、SmallIntegerに定義されているbasicNewと思いましたが、
System Browser -> Class -> Spawn HierarchyでPointを表示すると

Object
  Magnitude
    ArithmeticValue
      Point

と表示され、上記のクラスがスーパークラスに存在しませんでした。
ここで完全に行き詰まってしまいました。
--------------------------------------------------------------------

Pointの"x: xInteger y: yInteger"で使われているメッセージ"self basicNew"
はどこから継承してきたのでしょうか。

かなり長くなってしまいましたが、よろしくお願いします。

また、考え方、調べ方が「回りくどい、間違っている、質問が長い、もっと
いい方法がある」等ありましたら指摘してください。


---
NOBUTAKA Terauchi<europa @ ps.inforyoma.or.jp>










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