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