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