[SML 7761] Re: セーブされたファイルが自分でわかるプログラム
NISHIHARA Satoshi
nishis @ zephyr.dti.ne.jp
2010年 2月 1日 (月) 00:50:21 JST
西原です.
すみません,まずは問題を理解していないダメな例ということで.
1)
Polymorphを入れたSqueakで,ファイル選択作成ダイアログを
使って確認しました.
| writingBlock |
writingBlock :=
[ :aStream |
aStream
nextPutAll: '| aFilename |';
cr;
nextPutAll: 'aFilename := ';
nextPut: $';
nextPutAll: aStream name asString;
nextPut: $';
nextPut: $.;
cr;
nextPutAll: 'Transcript cr; show: aFilename printString' ].
(UITheme builder fileSave: 'choose or create file') ifNotNilDo:
[ :aFileStream |
[ writingBlock value: aFileStream ] ensure: [ aFileStream close ] ]
2)
| aFilename |
JunControlUtility
assert:
[(aFilename := JunFileDialog request) ifNil: [^nil].
aFilename writeStream]
do:
[:aStream |
aStream
nextPutAll: '| aFilename |';
cr;
nextPutAll: 'aFilename := ';
nextPut: $';
nextPutAll: aStream fileName asString;
nextPut: $';
nextPut: $.;
cr;
nextPutAll: 'Transcript cr; show: aFilename printString']
ensure: [:aStream | aStream close].
On 2010/01/31, at 20:07, AOKI Atsushi wrote:
> Smalltalkerの皆さんへ
>
> ここに述べるみたいなプログラムを書き下ろせるでしょうか。プロ
> グラムの中で、そのプログラム自身がセーブされているファイル名
> を用いるプログラムです。
>
> たとえば、以下のようなプログラムを書くとします。ただし、この
> プログラムをセーブしたファイル名を、このプログラムの中で使用
> しなければなりません。どこにセーブしてもいいのです。ファイル
> としてどこにセーブされるのかわからないのに、このプログラムの
> 中で当該のファイル名を使わなければならないのです。
>
> | aFilename |
> aFilename := <このプログラムをセーブしたファイル名>.
> Transcript cr; show: aFilename printString
>
> もしも、上記のプログラムを「/usr/aoki/smalltalk/
> tmp.st」とい
> うファイルにセーブしたとしたら、次のプログラムを実行したり、
>
> '/usr/aoki/smalltalk/tmp.st' asFilename fileIn
>
> ファイルリスト(ファイルブラウザ)などで当該のファイルを選択
> してファイルインしたら、トランスクリプトにそのファイル名が出
> 力されなければなりません。
>
> 何を言っているのかわからないかもしれませんが…、うまく説明で
> きないことを許してください。今度の勉強会@京都で援用しようと
> 思い立ち、それなりに実装したのですが、もっと良策があるやもし
> れないなぁと考え、皆さんに訊ねてみようとポストした次第です。
>
> ------------------------------------------------------------
> AOKI Atsushi http://www.cc.kyoto-su.ac.jp/~atsushi/
SML メーリングリストの案内