with-open-streams (マクロ)
パッケージ: CURL.LANGUAGE.COMPILER

コードを実行し、実行中に例外がスローされても、開いているファイルを必ず閉じます。

構文

"with-open-streams" マクロは、次の構文を使用します。

{with-open-streams var1[:type1] = value1 [, var2[:type2] = value2]* do body }

説明

with-open-streams の呼び出しは try/finally に展開されます。各 varStream-of 型か close メソッドを持つオブジェクトにバインドする必要があります。body が実行され、実行中にエラーが発生した場合でも最後には varclose メソッドが呼び出されます。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!"}
                }
            }
        }
    }
}