コードを実行し、実行中に例外がスローされても、開いているファイルを必ず閉じます。
構文
"with-open-streams" マクロは、次の構文を使用します。
{with-open-streams var1[:type1] = value1
[, var2[:type2] = value2]*
do
body
}
説明
with-open-streams の呼び出しは try/finally に展開されます。各
var は
Stream-of 型か
close メソッドを持つオブジェクトにバインドする必要があります。
body が実行され、実行中にエラーが発生した場合でも最後には
var で
close メソッドが呼び出されます。
body の最後のステートメントの値が存在する場合、これは
with-open-streams の値として生成されます。
注意事項
body 内のコードで close メソッド自体を呼び出さないでください。
例
次の例は、読み取り中にエラーがあった場合でもファイルが閉じられるようにするために、with-open-streams を使用してファイルの内容を読み取る方法を示しています。
例 |
|
{CommandButton
label = "Open file",
{on e:Action do
let buf:StringBuf = {StringBuf}
{if-non-null from = {choose-file} then
{with-open-streams in = {read-open from} do
{in.read-one-string buf = buf}
{if not buf.empty? then
{error "File is not empty!"}
}
}
}
}
}
| |