[SML 8119] Re: stringを評価可能オブジェクトに変更する方法について

青木 淳 atsushi @ cc.kyoto-su.ac.jp
2015年 3月 14日 (土) 09:36:27 JST


おはようございます、青木です。

On 2015/03/13 19:07, Squeak wrote:
 > 青木先生、早急の返信ありがとうございました。
 > 著書を拝読させて頂いております。
 > 早速試してみたいと思います。

拙著作を読んでいただき痛み入ります。

On 2015/03/14 8:22, Squeak wrote:
 > ご指摘ありがとうございます。
 > 今朝、実際に動かしてみたところ、両方共動くようです。

それは、それは、良かった、幸いでした。

Smalltalk(Squeakでも、VisualWorksでも、…)において、メッセ
ージの本体(メソッド)を探す出すには、大別するとふた通りある
と存じます。

一つ目は、メッセージ名を推測して、メッセージとその本体である
メソッドを探し出す方法です。(squeak @ cheshireneko.comさんが
用いた方法になります。)

二つ目は、レシーバであるオブジェクトを頼りにして、メッセージ
とその本体であるメソッドを探し出す方法です。

今回、私は二つ目の方法を用いました。文字列を評価して結果を出
しているオブジェクトの代表格は、あらゆるエディタの代表格であ
る「ParagraphEditor」、そして、「Debugger」になります。また、
「Inspector」がありましょう。それらが共通して発信しているメッ
セージを探すのです。きっと「評価【evaluate】」しているにちが
いない!と。

すると、以下のものたちが見つかります。あとは、これらの実装者
をブラウズするだけですよね。

#evaluate:in:to:notifying:ifFail:logged:
#evaluateSelection
#evaluateSelectionAndDo:
#evaluate:in:to:notifying:ifFail:
#evaluate:in:to:

以上、速攻の指南でした。お役に立つならば幸いです。

--- 青木淳@以下に二つ目の方法のプログラムを添えておきます。

	| collectionOfClasses aSet aCollection |
	collectionOfClasses := OrderedCollection new.
	collectionOfClasses add: ParagraphEditor.
	collectionOfClasses add: Debugger.
	collectionOfClasses add: Inspector.
	aSet := Set new.
	collectionOfClasses
		do: [:aClass | aClass
				methodsDo: [:aMethod | aMethod
						messagesDo: [:aMessage | aSet add: aMessage]]].
	aCollection := aSet
				select: [:aMessage | 'evaluate*' match: aMessage asString].
	Transcript clear.
	aCollection
		do: [:aMessage | Transcript cr; show: aMessage printString].
	^ aCollection



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