[SML 7178] Re: "0 @ 0" について
AOKI Atsushi
aoki @ sra.co.jp
2006年 9月 24日 (日) 12:31:25 JST
青木です。
いいプログラムです。さすが濱崎さん!
ブロックの再帰構造プログラムで、座布団一枚!いや二枚!!
> こんな風に自分でコードを書いてSmalltalkの仕組みを理解していけるのも、
> Smalltalkの面白いところですね。
はい、Smalltalk のことは Smalltalk に訊ねなさい!、ですよね。
出力先をブロックに加え、引数並びを整えて、クラス名を名前空間
も含めたフルネームで出すようにしてみました。
| methodSearchBlock aBlock |
methodSearchBlock :=
[:aClass :messageSelector :aStream |
| aBoolean |
aStream nextPutAll: aClass fullName.
(aClass selectors includes: messageSelector)
ifTrue: [aBoolean := true]
ifFalse:
[aClass superclass isNil
ifTrue: [aBoolean := false]
ifFalse:
[aStream nextPutAll: ' -> '.
aBoolean := methodSearchBlock
value: aClass superclass
value: messageSelector
value: aStream]].
aStream flush.
aBoolean yourself].
aBlock :=
[:anObject :messageSelector :aStream |
(methodSearchBlock
value: anObject class "<-- It's very important to beginners."
value: messageSelector
value: aStream)
ifFalse:
[aStream
cr;
nextPutAll: anObject printString;
nextPutAll: ' can''t understand ';
nextPutAll: messageSelector printString;
flush].
aStream yourself].
aBlock
value: Point
value: #basicNew
value: (Transcript
clear;
yourself)
------------------------------------------------------------
R2D2 (AOKI Atsushi) http://www.sra.co.jp/people/aoki/
SML メーリングリストの案内