[SML 7766] Re: セーブされたファイルが自分でわかるプログラム

AOKI Atsushi atsushi @ cc.kyoto-su.ac.jp
2010年 2月 2日 (火) 07:55:29 JST


おはようございます、青木@京都宇治です。

(10/02/02 1:43), AOKI Atsushi wrote:
> 実行コンテクストをさかのぼる方式ですね。私の実装と似ています。

ちょっと無理がある(皆さんに披露するには忍びない)私の実装を
示しておきます。基本的には濱崎さんの方式と同じでして、少しだ
けrobustにしたというところでしょうか。

| aFilename aContext aBoolean aBlock |
aFilename := nil.
aContext := thisContext.
aBoolean := true.
aBlock :=
        [[aContext notNil and: [aBoolean yourself]] whileTrue:
                [(aContext selector == #fileIn and: [aContext receiver isKindOf: Stream])
                    ifTrue:
                        [aFilename := aContext receiver stream fileName.
                        aBoolean := false].
                aContext := aContext sender]].
[aBlock value]
    on: aBlock messageNotUnderstoodSignal
    do:
        [:exception |
        aFilename := nil.
        exception return].
Transcript
    cr;
    show: aFilename printString

たとえば、上記のプログラムを「/usr/aoki/smalltalk/tmp.st」と
いうファイルにセーブして、次のメッセージ式(プログラム)を実
行したり、

'/usr/aoki/smalltalk/tmp.st' asFilename fileIn

ファイルブラウザ(ファイルリスト)などで、セーブしたファイル
を選択してファイルイン(File In)したら、トランスクリプトに
そのファイル名が出力されます。

表題(サブジェクト)の「セーブされたファイルが自分でわかるプ
ログラム」になっているかと思います。

もちろん、当該のセーブしたファイルを、どこか別のディレクトリ
に移動させてしまった後でも、ちゃんと動きます。

明日の京都での勉強会では、ワークブックとワークスペースを多用
するのですが、それらを一括管理(どこに置いておいてもいいよう
に)するために、上述のプログラムを援用してゆきます。後日(勉
強会が終了した後)に、それらのすべてを公開(このMLにアナウン
ス)する所存です。

------------------------------------------------------------
AOKI Atsushi          http://www.cc.kyoto-su.ac.jp/~atsushi/


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