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