[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 メーリングリストの案内